天天看點

maven springboot 除去指定的jar包_Spring Boot打包瘦身 Docker 使用全過程 動态配置、日志記錄配置...1、瘦身插件2、生成lib目錄3、配置檔案的剔除4、映射配置檔案目錄5、完整pom6、啟動指令7、制作鏡像8、Spring Boot日志9、Linux 删除目錄的指令10、實戰測試

springBoot打包的時候代碼和jar包打包在同一個jar包裡面,會導緻jar包非常龐大,在不能連接配接内網的時候調試代碼,每次隻改動了java代碼就需要把所有的jar包一起上傳,導緻傳輸檔案浪費了很多時間,是以如果打包的時候隻把寫成的代碼打包,已經上傳伺服器的jar包不用修改,這樣每次上傳檔案将會大大節省時間,接下來描述一下單獨打jar包的過程。

1、瘦身插件

更改springBoot打jar包的插件即可改為一下格式:
                             org.springframework.boot                spring-boot-maven-plugin                                    ZIP                                                                        non-exists                            non-exists                                                                                                                                                    repackage                                                                            classes                            false                                                                        
           

如圖:

maven springboot 除去指定的jar包_Spring Boot打包瘦身 Docker 使用全過程 動态配置、日志記錄配置...1、瘦身插件2、生成lib目錄3、配置檔案的剔除4、映射配置檔案目錄5、完整pom6、啟動指令7、制作鏡像8、Spring Boot日志9、Linux 删除目錄的指令10、實戰測試

2、生成lib目錄

2、那麼導入的jar包又在哪裡呢?沒關系,我們還有另一個插件。如下:
                   org.apache.maven.plugins                maven-dependency-plugin                                                            copy-dependencies                        package                                                    copy-dependencies                                                                            target/lib                            false                            false                            runtime                                                                        
           

當你打包的時候自動去生成,如下:

maven springboot 除去指定的jar包_Spring Boot打包瘦身 Docker 使用全過程 動态配置、日志記錄配置...1、瘦身插件2、生成lib目錄3、配置檔案的剔除4、映射配置檔案目錄5、完整pom6、啟動指令7、制作鏡像8、Spring Boot日志9、Linux 删除目錄的指令10、實戰測試

jar包:

maven springboot 除去指定的jar包_Spring Boot打包瘦身 Docker 使用全過程 動态配置、日志記錄配置...1、瘦身插件2、生成lib目錄3、配置檔案的剔除4、映射配置檔案目錄5、完整pom6、啟動指令7、制作鏡像8、Spring Boot日志9、Linux 删除目錄的指令10、實戰測試

這樣,就可以把項目中使用到的所有jar包提取出來。

3、配置檔案的剔除

項目在大jar包的時候也會把配置檔案和頁面一起打包,導緻每次都要替換或者更改配置檔案,導緻非常繁瑣。

我們可以在打包插件中指定不用打包的内容,如下:

                             org.apache.maven.plugins                maven-jar-plugin                                                                                **/*.properties                        **/*.xml                        **/*.yml                        static/**                        templates/**                        **/*.xlsx                                                
           

4、映射配置檔案目錄

Spring Boot 加載配置檔案的方式以及步驟
 springboot 預設加載配置檔案有三個位置1、a 加載第二個是 通jar包同級 config目錄 下的 一系列配置檔案 xxx.yaml2、b 加載第一個是 同jar包同級的 一系列配置檔案xxx.yaml3、c 加載第三個是 自身jar包的 配置檔案。加載順序 為:a b c
           

測試執行個體 :

 a: server.port = 8082b: server.port = 8081c: server.port = 8080
           
maven springboot 除去指定的jar包_Spring Boot打包瘦身 Docker 使用全過程 動态配置、日志記錄配置...1、瘦身插件2、生成lib目錄3、配置檔案的剔除4、映射配置檔案目錄5、完整pom6、啟動指令7、制作鏡像8、Spring Boot日志9、Linux 删除目錄的指令10、實戰測試

結果如下:

maven springboot 除去指定的jar包_Spring Boot打包瘦身 Docker 使用全過程 動态配置、日志記錄配置...1、瘦身插件2、生成lib目錄3、配置檔案的剔除4、映射配置檔案目錄5、完整pom6、啟動指令7、制作鏡像8、Spring Boot日志9、Linux 删除目錄的指令10、實戰測試

5、完整pom

             web-discovery-test                                    org.springframework.boot                spring-boot-maven-plugin                                    ZIP                                                                        non-exists                            non-exists                                                                                                                                                    repackage                                                                            classes                            false                                                                                                    org.apache.maven.plugins                maven-dependency-plugin                                                            copy-dependencies                        package                                                    copy-dependencies                                                                            target/lib                            false                            false                            runtime                                                                                                    org.apache.maven.plugins                maven-jar-plugin                                                                                **/*.properties                        **/*.xml                        **/*.yml                        static/**                        templates/**                        **/*.xlsx                                                            
           

6、啟動指令

 java -jar -Dloader.path=lib -jar web-discovery-test.jar    java -Dloader.path=lib -jar *.jar
           

7、制作鏡像

制作鏡像步驟

1、Dockerfile 檔案

 ## java:8-alpine(145) java8:latest (500m)FROM java:8-alpine# 維者資訊MAINTAINER fageRUN mkdir -p /work /work/config /work/libs /work/logs /work/fileEXPOSE  8080ADD  empty.jar  /work/web-discovery-test.jar  WORKDIR   /workCMD ["java","-Dloader.path=/work/libs","-jar","/work/web-discovery-test.jar"]
           

2、提供相對應的檔案

比如:empty.jar

運作指令
 docker run -d -p 8080:8080 --name web-discovery-test -v /fage/web-discovery-test/web-discovery-test.jar://work/web-discovery-test.jar -v /fage/web-discovery-test/logs:/work/logs -v /fage/web-discovery-test/libs:/work/libs -v /fage/web-discovery-test/file:/work/file -v /fage/web-discovery-test/config:/work/config web-discovery-test:v2
           

3、指令建構

 docker build -t 鏡像名:版本号标簽 .## 執行個體:docker build -t web-discovery-test:v1 .
           
 [[email protected] docker]#[[email protected] docker]# docker build -t web-discovery-test:v2 .Sending build context to Docker daemon   2.56kBStep 1/6 : FROM java:8-alpine8-alpine: Pulling from library/java709515475419: Pull complete38a1c0aaa6fd: Pull complete5b58c996e33e: Pull completeDigest: sha256:d49bf8c44670834d3dade17f8b84d709e7db47f1887f671a0e098bafa9bae49fStatus: Downloaded newer image for java:8-alpine ---> 3fd9dd82815cStep 2/6 : RUN mkdir -p /work /work/config /work/libs /work/logs /work/file ---> Running in 4833f98cc891Removing intermediate container 4833f98cc891 ---> 8398b01d5158Step 3/6 : EXPOSE  8080 ---> Running in 6b43e5e32ef7Removing intermediate container 6b43e5e32ef7 ---> 5bde587635f3Step 4/6 : ADD  empty.jar  /work/web-discovery-test.jar ---> beed469c2bfeStep 5/6 : WORKDIR   /work ---> Running in d953acaefdc0Removing intermediate container d953acaefdc0 ---> 801c71d84e45Step 6/6 : CMD ["java","-Dloader.path=/work/libs","-jar","/work/web-discovery-test.jar"] ---> Running in af7a7d89f55bRemoving intermediate container af7a7d89f55b ---> 2f03a2dfcb94Successfully built 2f03a2dfcb94Successfully tagged web-discovery-test:v2[[email protected] docker]#[[email protected] docker]# docker imagesREPOSITORY                                             TAG                 IMAGE ID            CREATED             SIZEweb-discovery-test                                     v2                  2f03a2dfcb94        4 seconds ago       145MB
           

4、其他指令

##進入容器
docker  exec  -it  容器名  /bin/bash 
##查詢 xx 相關的鏡像
docker search xx
##下載下傳鏡像到本地
docker pull 鏡像名 (可定義名稱 xx:xx)
##檢視本地鏡像
docker images
##檢視正在運作鏡像
docker ps (-a 所有啟動過的,包括不運作的)
##将容器制作成鏡像(内部自定義了一些配置等)
docker  commit  -m  '鏡像描述'  -a  '制作者'  容器名  鏡像名
##将制作好的鏡像打成 tar 包
docker  save  -o  tar包的名字  鏡像名
##怎麼使用 tar 包
docker  load  <  tar 包所在路徑
           

5、RUN vs CMD vs ENTRYPOINT差別

  • RUN:執行指令并建立新的鏡像層;
  • CMD:設定容器啟動後預設執行的指令即參數,但cmd能被docker run後面的指令行參數替換;
  • ENTRYPOINT:配置容器啟動時運作的指令。

ENTRYPOINT的Exec格式用于設定要執行的指令及其參數,同時可以通過CMD提供額外的參數。ENTRYPOINT中的參數始終會被用到,而CMD的額外參數可以再容器啟動時動态替換。

ENTRYPOINT指令可以讓容器以應用程式或者服務的形式運作。和CMD不同的是,ENTRYPOINT不會被忽略,一定會被執行,即使運作docker run時指定了其他指令。

修改鏡像名稱
[[email protected] ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
pujh/centos         tomcat-centos       70ff7873d7cd        About an hour ago   612 MB
docker.io/centos    latest              9f38484d220f        11 days ago         202 MB
[ro[email protected] ~]# docker tag 70ff7873d7cd my_centos:tomcat-centos
[[email protected] ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
my_centos           tomcat-centos       70ff7873d7cd        About an hour ago   612 MB
pujh/centos         tomcat-centos       70ff7873d7cd        About an hour ago   612 MB
docker.io/centos    latest              9f38484d220f        11 days ago         202 MB
[[email protected] ~]# docker rmi 70ff7873d7cd
Error response from daemon: conflict: unable to delete 70ff7873d7cd (cannot be forced) - image is being used by running container 70859e710147
[[email protected] ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                    NAMES
70859e710147        70ff                "/bin/sh -c '/root..."   About an hour ago   Up About an hour            0.0.0.0:8090->8080/tcp   dazzling_hopper
[[email protected] ~]# docker stop 70859e710147
[[email protected] ~]# docker rm 70859e710147
[[email protected] ~]# docker rmi 70ff7873d7cd
[[email protected] ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
my_centos           tomcat-centos       70ff7873d7cd        About an hour ago   612 MB
docker.io/centos    latest              9f38484d220f        11 days ago         202 MB
### IMAGE ID  一樣,無法删除
[[email protected] /]# docker rmi 00bc163fa009
Error response from daemon: conflict: unable to delete 00bc163fa009 (must be forced) - image is referenced in multiple repositories
[[email protected] /]# docker rmi williamyeh/java8:latest
Untagged: williamyeh/java8:latest
Untagged: williamyeh/[email protected]:174d528516a0eae5c4df69966eeb5e51d7c0dc1a532249af61013953eab1d9f3
           

8、Spring Boot日志

Spring Boot 預設使用logback日志。

1、使用動态配置

開發與生産配置隔離,分開配置

application.properties

 ## 開發環境 dev /生産環境 productspring.profiles.active=dev
           

application-dev.yaml

 ## 日志配置 配置絕對路徑,不要使用相對路徑logging:  file:    path: D:\logs\dev## 其他配置    server:  port: 8084
           

application-product.yaml

 ## 日志配置 配置絕對路徑,不要使用相對路徑logging:  file:    path: D:\logs\product## 其他配置    server:  port: 80
           

2、logback配置

logback-spring.xml配置

一定要加 -spring ,表示在spring配置被加載之後才執行,目前的logback配置,

                         converter/>                    converter/>              value="${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>              value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>System.outdebug${CONSOLE_LOG_PATTERN}UTF-8${FILE_LOG_PATTERN}UTF-8${logPath}/debug/log-debug-%d{yyyy-MM-dd}.%i.log100MB15debug${FILE_LOG_PATTERN}UTF-8${logPath}/info/log-info-%d{yyyy-MM-dd}.%i.log100MB15infoACCEPTDENY${FILE_LOG_PATTERN}UTF-8${logPath}/error/log-error-%d{yyyy-MM-dd}.%i.log100MB15ERROR
           

9、Linux 删除目錄的指令

-r 就是向下遞歸,不管有多少級目錄,一并删除-f 就是直接強行删除,不作任何提示的意思

删除檔案夾執行個體:
rm -rf /var/log/httpd/access
将會删除/var/log/httpd/access目錄以及其下所有檔案、檔案夾
           
删除檔案使用執行個體:
rm -f /var/log/httpd/access.log
将會強制删除/var/log/httpd/access.log這個檔案
           

10、實戰測試

1、項目結構

maven springboot 除去指定的jar包_Spring Boot打包瘦身 Docker 使用全過程 動态配置、日志記錄配置...1、瘦身插件2、生成lib目錄3、配置檔案的剔除4、映射配置檔案目錄5、完整pom6、啟動指令7、制作鏡像8、Spring Boot日志9、Linux 删除目錄的指令10、實戰測試

2、伺服器結構

maven springboot 除去指定的jar包_Spring Boot打包瘦身 Docker 使用全過程 動态配置、日志記錄配置...1、瘦身插件2、生成lib目錄3、配置檔案的剔除4、映射配置檔案目錄5、完整pom6、啟動指令7、制作鏡像8、Spring Boot日志9、Linux 删除目錄的指令10、實戰測試

3、鏡像

 docker build -t web-discovery-test:v1 .
           
maven springboot 除去指定的jar包_Spring Boot打包瘦身 Docker 使用全過程 動态配置、日志記錄配置...1、瘦身插件2、生成lib目錄3、配置檔案的剔除4、映射配置檔案目錄5、完整pom6、啟動指令7、制作鏡像8、Spring Boot日志9、Linux 删除目錄的指令10、實戰測試

可以發現,這個jar是非常的小

4、執行結果

運作指令

 docker run -d -p 8080:8080 --name web-discovery-test -v /fage/web-discovery-test/web-discovery-test.jar://work/web-discovery-test.jar -v /fage/web-discovery-test/logs:/work/logs -v /fage/web-discovery-test/libs:/work/libs -v /fage/web-discovery-test/file:/work/file -v /fage/web-discovery-test/config:/work/config web-discovery-test:v2
           

運作結果檢視

maven springboot 除去指定的jar包_Spring Boot打包瘦身 Docker 使用全過程 動态配置、日志記錄配置...1、瘦身插件2、生成lib目錄3、配置檔案的剔除4、映射配置檔案目錄5、完整pom6、啟動指令7、制作鏡像8、Spring Boot日志9、Linux 删除目錄的指令10、實戰測試

日志列印

 [[email protected] docker]# docker logs -f b2b3eaee4b81  .   ____          _            __ _ _ /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/  ___)| |_)| | | | | || (_| |  ) ) ) )  '  |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot ::        (v2.3.2.RELEASE)2020-08-06 14:14:17.080  INFO 1 --- [           main] com.fage.demo.DemoApplication            : Starting DemoApplication v0.0.1-SNAPSHOT on b2b3eaee4b81 with PID 1 (/work/web-discovery-test.jar started by root in /work)2020-08-06 14:14:17.084  INFO 1 --- [           main] com.fage.demo.DemoApplication            : The following profiles are active: product2020-08-06 14:14:18.863  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)2020-08-06 14:14:18.880  INFO 1 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]2020-08-06 14:14:18.892  INFO 1 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.37]2020-08-06 14:14:19.026  INFO 1 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext2020-08-06 14:14:19.026  INFO 1 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1835 ms2020-08-06 14:14:19.892  INFO 1 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'2020-08-06 14:14:20.374  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''2020-08-06 14:14:20.403  INFO 1 --- [           main] com.fage.demo.DemoApplication            : Started DemoApplication in 4.073 seconds (JVM running for 4.615)2020-08-06 14:15:04.855  INFO 1 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'2020-08-06 14:15:04.855  INFO 1 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'2020-08-06 14:15:04.871  INFO 1 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 16 ms2020-08-06 14:15:04.928  INFO 1 --- [nio-8080-exec-1] com.fage.demo.DemoApplication            : file.isDirectory() = true2020-08-06 14:15:35.456  INFO 1 --- [nio-8080-exec-4] com.fage.demo.DemoApplication            : hello world2020-08-06 14:15:35.457 ERROR 1 --- [nio-8080-exec-4] com.fage.demo.DemoApplication            : error2020-08-06 14:16:12.006  INFO 1 --- [nio-8080-exec-6] com.fage.demo.DemoApplication            : hello world2020-08-06 14:16:12.012 ERROR 1 --- [nio-8080-exec-6] com.fage.demo.DemoApplication            : error2020-08-06 14:16:15.305  INFO 1 --- [nio-8080-exec-7] com.fage.demo.DemoApplication            : file.isDirectory() = true2020-08-06 14:16:15.306  INFO 1 --- [nio-8080-exec-7] com.fage.demo.DemoApplication            : 檔案夾: /work/file/mk2020-08-06 14:16:15.306  INFO 1 --- [nio-8080-exec-7] com.fage.demo.DemoApplication            : 檔案: /work/file/aaa
           

驗證 是否映射成功?調用接口:http://192.168.71.134:8080/files和http://192.168.71.134:8080/hello

maven springboot 除去指定的jar包_Spring Boot打包瘦身 Docker 使用全過程 動态配置、日志記錄配置...1、瘦身插件2、生成lib目錄3、配置檔案的剔除4、映射配置檔案目錄5、完整pom6、啟動指令7、制作鏡像8、Spring Boot日志9、Linux 删除目錄的指令10、實戰測試

日志列印:

 2020-08-06 14:16:15.305  INFO 1 --- [nio-8080-exec-7] com.fage.demo.DemoApplication            : file.isDirectory() = true2020-08-06 14:16:15.306  INFO 1 --- [nio-8080-exec-7] com.fage.demo.DemoApplication            : 檔案夾: /work/file/mk2020-08-06 14:16:15.306  INFO 1 --- [nio-8080-exec-7] com.fage.demo.DemoApplication            : 檔案: /work/file/aaa
           

代碼分享

微信公衆号 點選關于我,加入QQ群,即可擷取到代碼

maven springboot 除去指定的jar包_Spring Boot打包瘦身 Docker 使用全過程 動态配置、日志記錄配置...1、瘦身插件2、生成lib目錄3、配置檔案的剔除4、映射配置檔案目錄5、完整pom6、啟動指令7、制作鏡像8、Spring Boot日志9、Linux 删除目錄的指令10、實戰測試

繼續閱讀