SpringBoot實(shí)現(xiàn)熱部署的三種方式
熱部署,就是不需要停掉服務(wù),可以線上改,改完立馬生效。
1.為什么用熱部署?
因?yàn)椴粏⒂脽岵渴饡r(shí)每次更改java數(shù)據(jù)都要重啟服務(wù)器影響開發(fā)效率。
2.熱部署的實(shí)現(xiàn)原理?
深層原理是使用了兩個(gè)ClassLoader,一個(gè)Classloader加載那些不會(huì)改變的類(第三方Jar包),另一個(gè)ClassLoader加載會(huì)更改的類,稱為restart ClassLoader,這樣在有代碼更改的時(shí)候,原來的restart ClassLoader 被丟棄,重新創(chuàng)建一個(gè)restart ClassLoader,由于需要加載的類相比較少,所以實(shí)現(xiàn)了較快的重啟時(shí)間。
3. 熱部署的實(shí)現(xiàn)方式
1.使用springloaded配置pom.xml文件,使用mvn spring-boot:run啟動(dòng)
<!--實(shí)現(xiàn)熱部署-->
<!--devtools熱部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
<scope>true</scope>
</dependency>
然后在Settings→Build→Compiler中將Build project automatically勾選上,最后按ctrl+shift+alt+/ 選擇registy,將compiler.automake.allow.when.app.running勾選。另外,對于某些idea沒有這個(gè)選項(xiàng)的,設(shè)置好其他的之后,ctrl+f9也是可以的。
(1) devtools可以實(shí)現(xiàn)頁面熱部署(即頁面修改后會(huì)立即生效,這個(gè)可以直接在application.properties文件中配置spring.thymeleaf.cache=false來實(shí)現(xiàn)),
實(shí)現(xiàn)類文件熱部署(類文件修改后不會(huì)立即生效),實(shí)現(xiàn)對屬性文件的熱部署。
即devtools會(huì)監(jiān)聽classpath下的文件變動(dòng),并且會(huì)立即重啟應(yīng)用(發(fā)生在保存時(shí)機(jī)),注意:因?yàn)槠洳捎玫奶摂M機(jī)機(jī)制,該項(xiàng)重啟是很快的
(2)配置了true后在修改java文件后也就支持了自動(dòng)部署,不過這種方式是屬于項(xiàng)目重啟,會(huì)清空session中的值,也就是如果有用戶登陸的話,項(xiàng)目重啟后需要重新登陸。
2.使用springloaded本地加載啟動(dòng),配置jvm參數(shù)
-javaagent:<jar包地址> -noverify
3.使用devtools工具包,操作簡單,但是每次需要重新部署
1、引入devtools依賴
在你的pom.xml配置文件中,引入devtools依賴包:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>提示:
設(shè)置optional 為true,是避免大家微服務(wù)項(xiàng)目父子項(xiàng)目依賴?yán)^承沖突。
2、devtools的配置
spring:
devtools:
restart:
enabled: true #設(shè)置開啟熱部署,false即不開啟熱部署
additional-paths: src/main/java #指定熱部署的目錄
exclude: test/** #指定目錄不更新3、Intellij Idea修改
如果你是使用的idea工具開發(fā),那你還需要改以下兩個(gè)地方:
1、勾上自動(dòng)編譯或者手動(dòng)重新編譯 File -> Setting -> Build, Execution, Deployment -> Compiler:勾選 [Build project automatically]
演示截圖如下:

2、注冊 Shift+Ctrl+Alt+/(Windows快捷鍵), 單擊[Registry],勾選 [compiler.automake.allow.when.app.running]
快捷鍵:Shift+Ctrl+Alt+/ 后,會(huì)彈出如下界面:

然后單擊 Registry,找到 [compiler.automake.allow.when.app.running]把它勾選上。具體演示如下:

到此,以上就完成了熱部署的所有配置啦,你們記得配置完成后,重啟idea!讓所有配置都生效。
再次,若想驗(yàn)證熱部署是否生效,你們可以做個(gè)簡單測試(比如隨便修改個(gè)接口地址啥的,然后用新接口地址去訪問,驗(yàn)證修改代碼是否在不手動(dòng)啟動(dòng)項(xiàng)目的情況下生效等),我這里就不給大家演示了。
同時(shí),如下是我從網(wǎng)上看到的一些注意事項(xiàng),經(jīng)實(shí)測確實(shí)如此,也希望大家在使用熱部署的同時(shí),也能少走些彎路。
具體如下:
- package 打包時(shí),不包含devtools工具。
- 生產(chǎn)環(huán)境devtools將被禁用,如java -jar方式或者自定義的類加載器等都會(huì)識別為生產(chǎn)環(huán)境。
- devtools會(huì)在windows資源管理器占用java進(jìn)程,在開發(fā)工具里面殺不掉,只能手動(dòng)kill掉,不然重啟會(huì)選成端口被占用情況。
- Thymeleaf無需配置spring.thymeleaf.cache: false,devtools默認(rèn)會(huì)自動(dòng)設(shè)置。
到此這篇關(guān)于SpringBoot實(shí)現(xiàn)熱部署的三種方式的文章就介紹到這了,更多相關(guān)SpringBoot 熱部署內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- IDEA中實(shí)現(xiàn)springboot熱部署方式
- SpringBoot項(xiàng)目熱部署的實(shí)現(xiàn)
- SpringBoot+devtools實(shí)現(xiàn)熱部署的示例代碼
- IDEA2023.3.4開啟SpringBoot項(xiàng)目的熱部署(圖文)
- SpringBoot使用DevTools實(shí)現(xiàn)后端熱部署的過程詳解
- Idea中springboot項(xiàng)目的熱部署無法生效問題解決
- Spring Boot 3.x 全新的熱部署配置方式詳解(IntelliJ IDEA 2023.1)
- SpringBoot實(shí)現(xiàn)熱部署的方式總結(jié)
- Spring Boot 熱部署實(shí)現(xiàn)步驟詳解
相關(guān)文章
Java中super關(guān)鍵字的用法和細(xì)節(jié)
大家好,本篇文章主要講的是Java中super關(guān)鍵字的用法和細(xì)節(jié),感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下2022-01-01
Springboot整合RabbitMq測試TTL的方法詳解
這篇文章主要介紹了Springboot整合RabbitMq測試TTL的設(shè)置,設(shè)置TTL一般由兩種設(shè)置方法,設(shè)置整個(gè)隊(duì)列的過期時(shí)間另一種設(shè)置單個(gè)消息的過期時(shí)間,通過示例圖文相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-03-03
SpringBoot打印Banner的實(shí)現(xiàn)示例
本文主要介紹了SpringBoot啟動(dòng)Banner的實(shí)現(xiàn)原理和打印流程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01
Spring中的BeanFactory對象實(shí)例化工廠詳解
這篇文章主要介紹了Spring中的BeanFactory對象實(shí)例化工廠詳解,BeanFactory及其子類是Spring IOC容器中最重要的一個(gè)類,BeanFactory由類名可以看出其是一個(gè)Bean工廠類,其實(shí)它確實(shí)是一個(gè)Bean工廠類,完成Bean的初始化操作,需要的朋友可以參考下2023-12-12
Java利用Netty時(shí)間輪實(shí)現(xiàn)延時(shí)任務(wù)
時(shí)間輪是一種可以執(zhí)行定時(shí)任務(wù)的數(shù)據(jù)結(jié)構(gòu)和算法。本文將為大家詳細(xì)講解一下Java如何利用Netty時(shí)間輪算法實(shí)現(xiàn)延時(shí)任務(wù),感興趣的小伙伴可以了解一下2022-08-08
Java Idea TranslationPlugin翻譯插件使用解析
這篇文章主要介紹了Java Idea TranslationPlugin翻譯插件使用解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04

