SpringBoot 增量部署發(fā)布的實(shí)現(xiàn)步驟
一、背景介紹
由于項(xiàng)目依賴的jar越來(lái)越多,Springboot默認(rèn)的打包方式是將整個(gè)項(xiàng)目打包成一個(gè)jar包,每次發(fā)布時(shí),打包后的jar越來(lái)越大,更新一個(gè)很小的功能,需要將整個(gè)jar上傳運(yùn)行。這樣效率太低了,考慮實(shí)現(xiàn)每次發(fā)布時(shí),只發(fā)布修改了的部分,實(shí)現(xiàn)增量發(fā)布。
二、實(shí)現(xiàn)思路
1.將整體打包的jar進(jìn)行拆分:
拆為引用的lib和resource(靜態(tài)資源)兩部分(準(zhǔn)確說(shuō)是三部分,還包括當(dāng)前項(xiàng)目的jar)
2.通過(guò)命令:java -Dloader.path=./lib,./resource -jar demo-exec.jar 來(lái)指定資源路徑運(yùn)行。
三、實(shí)現(xiàn)步驟
1.打包當(dāng)前web項(xiàng)目
打包當(dāng)前web項(xiàng)目時(shí),排除引用的jar,只打包成可運(yùn)行的jar。
修改項(xiàng)目pom.xml文件,在build->plugins里增加:
<!--1.打包當(dāng)前web項(xiàng)目--> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!-- 指定該jar包啟動(dòng)時(shí)的主類--> <mainClass>com.rc114.bms.RbApplication</mainClass> <!-- 模塊打包需要增加這個(gè)配置,帶exec的為可執(zhí)行jar,不帶的為可引用jar--> <classifier>exec</classifier> <includeSystemScope>true</includeSystemScope> <!--必須為ZIP模式,不指定的話-Dloader.path不生效--> <layout>ZIP</layout> <!-- 打包的時(shí)候排除的jar包--> <includes> <include> <groupId>non-exists</groupId> <artifactId>non-exists</artifactId> </include> </includes> </configuration> </plugin>
注意:這里使用的是 spring-boot-maven-plugin 插件。
2.打包依賴項(xiàng)lib
修改項(xiàng)目pom.xml文件,在build->plugins里增加:
<!--2.打包依賴項(xiàng)-->
<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.打包當(dāng)前web項(xiàng)目-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!-- 指定該jar包啟動(dòng)時(shí)的主類-->
<mainClass>com.rc114.bms.RbApplication</mainClass>
<!-- 模塊打包需要增加這個(gè)配置,帶exec的為可執(zhí)行jar,不帶的為可引用jar-->
<classifier>exec</classifier>
<includeSystemScope>true</includeSystemScope>
<!--必須為ZIP模式,不指定的話-Dloader.path不生效-->
<layout>ZIP</layout>
<!-- 打包的時(shí)候排除的jar包-->
<includes>
<include>
<groupId>non-exists</groupId>
<artifactId>non-exists</artifactId>
</include>
</includes>
</configuration>
</plugin>
<!--2.打包依賴項(xiàng)-->
<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ù)制項(xiàng)目里的src\main\resources文件夾到準(zhǔn)備發(fā)布目錄即可。
4.上傳更新文件
將上面的lib目錄和***-exec.jar和網(wǎng)站項(xiàng)目下src\main\resources目錄復(fù)制到一起,大概像這樣:

將上面目錄上傳到服務(wù)器,然后執(zhí)行命令:
java -Dloader.path=./lib,./resource -jar rc_web_rb-0.0.1-exec.jar
即可運(yùn)行Springboot項(xiàng)目。
四、增量發(fā)布的好處
進(jìn)行增量打包后:
1.如果前端有修改時(shí),可以對(duì)resource中的文件進(jìn)行替換,且不用重啟服務(wù)。
2.如果后端有修改,要看是web項(xiàng)目修改還是引用的jar修改:
(1)如果是web項(xiàng)目有修改,只用更新項(xiàng)目****-exec.jar即可(需重新執(zhí)行啟動(dòng)命令)。
(2)如果是引用的jar包有修改,只需將變動(dòng)的jar包上傳至lib文件夾即可。
附:Springboot啟動(dòng)腳本
#!/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
# 查詢是否有原進(jìn)程
tpid1=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
# 如果此進(jìn)程已經(jīng)啟動(dòng),則先殺掉
if [ $tpid1 ]; then
kill -9 $tpid1
fi
# 啟動(dòng)項(xiàng)目jar包,java命令寫(xiě)成了絕對(duì)路徑,因?yàn)橄到y(tǒng)啟動(dòng)的時(shí)候是不識(shí)別環(huán)境變量的
# 日志文件也寫(xiě)成了絕對(duì)路徑,不然日志會(huì)輸出在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 &
修改對(duì)應(yīng)參數(shù),將腳本保存為start.sh,切換到腳本所在目錄,執(zhí)行:./start.sh 即可啟動(dòng)項(xiàng)目。
到此這篇關(guān)于SpringBoot 增量部署發(fā)布的實(shí)現(xiàn)步驟的文章就介紹到這了,更多相關(guān)SpringBoot 增量部署發(fā)布內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在IntelliJ?IDEA中配置SSH服務(wù)器開(kāi)發(fā)環(huán)境并實(shí)現(xiàn)固定地址遠(yuǎn)程連接的操作方法
本文主要介紹如何在IDEA中設(shè)置遠(yuǎn)程連接服務(wù)器開(kāi)發(fā)環(huán)境,并結(jié)合Cpolar內(nèi)網(wǎng)穿透工具實(shí)現(xiàn)無(wú)公網(wǎng)遠(yuǎn)程連接,然后實(shí)現(xiàn)遠(yuǎn)程Linux環(huán)境進(jìn)行開(kāi)發(fā),本例使用的是IDEA2023.2.5版本,感興趣的朋友跟隨小編一起看看吧2024-01-01
如何通過(guò)Java監(jiān)聽(tīng)MySQL數(shù)據(jù)的變化
對(duì)于二次開(kāi)發(fā)來(lái)說(shuō),很大一部分就找找文件和找數(shù)據(jù)庫(kù)的變化情況,下面這篇文章主要給大家介紹了關(guān)于如何通過(guò)Java監(jiān)聽(tīng)MySQL數(shù)據(jù)的變化的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-03-03
Java網(wǎng)絡(luò)編程之TCP程序設(shè)計(jì)
這篇文章主要為大家詳細(xì)介紹了Java網(wǎng)絡(luò)編程之TCP程序設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08
java基于JSON實(shí)現(xiàn)前后端交互(附代碼)
本文主要介紹了java基于JSON實(shí)現(xiàn)前后端交互,通過(guò)實(shí)際代碼示例展示了如何前后端JSON交互,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01
Java對(duì)象的XML序列化與反序列化實(shí)例解析
這篇文章主要介紹了Java對(duì)象的XML序列化與反序列化實(shí)例解析,小編覺(jué)得還是挺不錯(cuò)的,這里分享給大家。2017-10-10
如何在Spring?Boot框架中使用攔截器實(shí)現(xiàn)URL限制
在Spring?Boot框架中,您可以使用攔截器(Interceptor)來(lái)控制限制URL列表,本文通過(guò)一個(gè)簡(jiǎn)單的示例給大家介紹Spring?Boot?攔截器實(shí)現(xiàn)URL限制的操作方法,感興趣的朋友跟隨小編一起看看吧2023-08-08

