SpringBoot 增量部署發(fā)布的實現(xiàn)步驟
一、背景介紹
由于項目依賴的jar越來越多,Springboot默認的打包方式是將整個項目打包成一個jar包,每次發(fā)布時,打包后的jar越來越大,更新一個很小的功能,需要將整個jar上傳運行。這樣效率太低了,考慮實現(xiàn)每次發(fā)布時,只發(fā)布修改了的部分,實現(xiàn)增量發(fā)布。
二、實現(xiàn)思路
1.將整體打包的jar進行拆分:
拆為引用的lib和resource(靜態(tài)資源)兩部分(準確說是三部分,還包括當前項目的jar)
2.通過命令:java -Dloader.path=./lib,./resource -jar demo-exec.jar 來指定資源路徑運行。
三、實現(xiàn)步驟
1.打包當前web項目
打包當前web項目時,排除引用的jar,只打包成可運行的jar。
修改項目pom.xml文件,在build->plugins里增加:
<!--1.打包當前web項目--> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!-- 指定該jar包啟動時的主類--> <mainClass>com.rc114.bms.RbApplication</mainClass> <!-- 模塊打包需要增加這個配置,帶exec的為可執(zhí)行jar,不帶的為可引用jar--> <classifier>exec</classifier> <includeSystemScope>true</includeSystemScope> <!--必須為ZIP模式,不指定的話-Dloader.path不生效--> <layout>ZIP</layout> <!-- 打包的時候排除的jar包--> <includes> <include> <groupId>non-exists</groupId> <artifactId>non-exists</artifactId> </include> </includes> </configuration> </plugin>
注意:這里使用的是 spring-boot-maven-plugin 插件。
2.打包依賴項lib
修改項目pom.xml文件,在build->plugins里增加:
<!--2.打包依賴項--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.2.0</version> <!-- 使用適合你的版本 --> <executions> <execution> <id>copy-dependencies</id> <phase>prepare-package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/lib</outputDirectory> <overWriteReleases>false</overWriteReleases> <overWriteSnapshots>false</overWriteSnapshots> <overWriteIfNewer>true</overWriteIfNewer> </configuration> </execution> </executions> </plugin>
注意:這里使用的是 maven-dependency-plugin 插件。
完整的 build 配置:
<build> <plugins> <!--1.打包當前web項目--> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!-- 指定該jar包啟動時的主類--> <mainClass>com.rc114.bms.RbApplication</mainClass> <!-- 模塊打包需要增加這個配置,帶exec的為可執(zhí)行jar,不帶的為可引用jar--> <classifier>exec</classifier> <includeSystemScope>true</includeSystemScope> <!--必須為ZIP模式,不指定的話-Dloader.path不生效--> <layout>ZIP</layout> <!-- 打包的時候排除的jar包--> <includes> <include> <groupId>non-exists</groupId> <artifactId>non-exists</artifactId> </include> </includes> </configuration> </plugin> <!--2.打包依賴項--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.2.0</version> <!-- 使用適合你的版本 --> <executions> <execution> <id>copy-dependencies</id> <phase>prepare-package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/lib</outputDirectory> <overWriteReleases>false</overWriteReleases> <overWriteSnapshots>false</overWriteSnapshots> <overWriteIfNewer>true</overWriteIfNewer> </configuration> </execution> </executions> </plugin> </plugins> </build>
執(zhí)行maven打包命令,打包完后,將得到這樣的結(jié)果:
3.復(fù)制resource文件夾
直接復(fù)制項目里的src\main\resources文件夾到準備發(fā)布目錄即可。
4.上傳更新文件
將上面的lib目錄和***-exec.jar和網(wǎng)站項目下src\main\resources目錄復(fù)制到一起,大概像這樣:
將上面目錄上傳到服務(wù)器,然后執(zhí)行命令:
java -Dloader.path=./lib,./resource -jar rc_web_rb-0.0.1-exec.jar
即可運行Springboot項目。
四、增量發(fā)布的好處
進行增量打包后:
1.如果前端有修改時,可以對resource中的文件進行替換,且不用重啟服務(wù)。
2.如果后端有修改,要看是web項目修改還是引用的jar修改:
(1)如果是web項目有修改,只用更新項目****-exec.jar即可(需重新執(zhí)行啟動命令)。
(2)如果是引用的jar包有修改,只需將變動的jar包上傳至lib文件夾即可。
附:Springboot啟動腳本
#!/bin/sh #路徑 APP_LIB=/***/lib APP_RESOURCE=/***/resources APP_NAME=/***/rc_web_rb-0.0.1-exec.jar APP_LOG=/***/rc_web_rb-0.0.1.log # 查詢是否有原進程 tpid1=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'` # 如果此進程已經(jīng)啟動,則先殺掉 if [ $tpid1 ]; then kill -9 $tpid1 fi # 啟動項目jar包,java命令寫成了絕對路徑,因為系統(tǒng)啟動的時候是不識別環(huán)境變量的 # 日志文件也寫成了絕對路徑,不然日志會輸出在init.d目錄 nohup /usr/lib/jvm/jdk-17.0.2/bin/java -Dloader.path=$APP_LIB,$APP_RESOURCE -Dspring.profiles.active=pro -jar $APP_NAME -> $APP_LOG 2>&1 &
修改對應(yīng)參數(shù),將腳本保存為start.sh,切換到腳本所在目錄,執(zhí)行:./start.sh 即可啟動項目。
到此這篇關(guān)于SpringBoot 增量部署發(fā)布的實現(xiàn)步驟的文章就介紹到這了,更多相關(guān)SpringBoot 增量部署發(fā)布內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于SpringBoot集成Lettuce連接Redis的方法和案例
這篇文章主要介紹了關(guān)于SpringBoot集成Lettuce連接Redis的方法和案例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04SpringBoot前后端json數(shù)據(jù)交互的全過程記錄
現(xiàn)在大多數(shù)互聯(lián)網(wǎng)項目都是采用前后端分離的方式開發(fā),下面這篇文章主要給大家介紹了關(guān)于SpringBoot前后端json數(shù)據(jù)交互的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-03-03Java POI實現(xiàn)將導(dǎo)入Excel文件的示例代碼
這篇文章主要介紹了Java POI實現(xiàn)將導(dǎo)入Excel文件的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-02-02IDEA2020.2.3中創(chuàng)建JavaWeb工程的完整步驟記錄
這篇文章主要給大家介紹了關(guān)于IDEA2020.2.3中創(chuàng)建JavaWeb工程的完整步驟,文中通過圖文介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12常用數(shù)字簽名算法RSA與DSA的Java程序內(nèi)實現(xiàn)示例
這篇文章主要介紹了常用數(shù)字簽名算法RSA與DSA的Java程序內(nèi)實現(xiàn)示例,一般來說DSA算法用于簽名的效率會比RSA要快,需要的朋友可以參考下2016-04-04