參考文獻:
https://blog.csdn.net/qq_42685050/article/details/81588584
https://juejin.cn/post/6844904121821036552
https://blog.csdn.net/lisheng19870305/article/details/94620716
近來在使用idea做springboot的項目,但是發現每次修改之后我都需要重新將項目關閉再開啟,這樣比較繁瑣,發現通過熱部署的方式讓我們可以一邊修改我們的項目,然后在頁面中直接通過刷新展示出來
spring為開發者提供了一個名為spring-boot-devtools的模塊來使Spring Boot應用支持熱部署,提高開發者的開發效率,無需手動重啟Spring Boot應用。
devtools的原理
深層原理是使用了兩個ClassLoader,一個Classloader加載那些不會改變的類(第三方Jar包),另一個ClassLoader加載會更改的類,稱為restart ClassLoader,這樣在有代碼更改的時候,原來的restart ClassLoader 被丟棄,重新創建一個restart ClassLoader,由於需要加載的類相比較少,所以實現了較快的重啟時間。
這里我沒有把所有的方式都嘗試一遍,只是使用了devtools的方式
總的來說,一共需要兩個步驟:
第一步、先設置我們的pom.xml文件,加入依賴
首先是把下面代碼在<dependencies>中
<!--添加熱部署--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> <scope>true</scope> </dependency>
另外下面的代碼是放在<build> 下面<plugins>里的
<plugin> <!--熱部署配置--> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!--fork:如果沒有該項配置,整個devtools不會起作用--> <fork>true</fork> </configuration> </plugin>
第二步、設置IDEA的自動編譯:
(1)File-Settings-Compiler勾選 Build Project automatically
(2)快捷鍵 ctrl + shift + alt + /,選擇Registry,勾上 Compiler autoMake allow when app running
這樣我們的熱部署就完成了,可以再我們的項目中修改返回值,或者修改Mapping的value值后,在我們的頁面中刷新試試,
我們的修改已經生效了,不用通過再關閉再開啟項目查看了。
spring-boot-devtools 介紹
-
spring-boot-devtools
是一個為開發者服務的模塊,可以實現 Spring Boot 熱部署,其中最重要的功能就是自動將應用代碼更改到最新的 App 上面去。 -
spring-boot-devtools
可以實現頁面熱部署,實現類文件熱部署(類文件修改后不會立即生效),實現對屬性配置文件的熱部署。其原理是spring-boot-devtools
會監聽 Classpath 下的文件變動,並且會立即重啟應用(發生在保存時機)。 -
由於采用的虛擬機機制,重啟的時候只是加載了在開發的 Class,沒有重新加載第三方的 JAR 包,所以重啟是很快的。
配置熱部署
- 在 pom.xml 文件中,添加項目
spring-boot-devtools
依賴
<!--熱部署依賴--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <!--沒有該項配置,熱部署不會起作用--> <configuration> <fork>true</fork> </configuration> </plugin>
- 在資源文件
application.properties
中進行熱部署的相關配置
# 頁面修改后立即生效,關閉緩存,立即刷新 spring.thymeleaf.cache=false # 熱部署生效 spring.devtools.restart.enabled=true # 設置需要重啟的目錄 spring.devtools.restart.additional-paths=src/java/main # 設置不需要重啟的目錄 spring.devtools.restart.exclude=static/**,public/**,WEB-INF/** # 為 mybatis 設置,生產環境可刪除 # restart.include.mapper=/mapper-[\\w-\\.]+jar # restart.include.pagehelper=/pagehelper-[\\w-\\.]+jar
當熱部署搭建完成后,程序只要啟動一次即可,后面修改代碼時,只需保存后便可以觸發熱部署機制,自動重啟服務。
設置 IDEA 環境自動編譯
在使用 IDEA 編譯器時,需要設置自動編譯。
- 在編譯器選項中勾選
Build project automatically
選項

- 使用快捷鍵:
Ctrl + Alt + Shift + /
調出 Registry 窗口,勾選compiler.automake.allow.when.app.running
選項

源碼地址
具體步驟
一、開啟IDEA的自動編譯(靜態)
具體步驟:打開頂部工具欄 File -> Settings -> Default Settings -> Build -> Compiler 然后勾選 Build project automatically 。
二、開啟IDEA的自動編譯(動態)
具體步驟:同時按住 Ctrl + Shift + Alt + / 然后進入Registry ,勾選自動編譯並調整延時參數。
- compiler.automake.allow.when.app.running -> 自動編譯
- compile.document.save.trigger.delay -> 自動更新文件
PS:網上極少有人提到compile.document.save.trigger.delay 它主要是針對靜態文件如JS CSS的更新,將延遲時間減少后,直接按F5刷新頁面就能看到效果!
三、開啟IDEA的熱部署策略(非常重要)
具體步驟:頂部菜單- >Edit Configurations->SpringBoot插件->目標項目->勾選熱更新。
image.png
四、在項目添加熱部署插件(可選)
溫馨提示:
如果因為舊項目十分臃腫,導致熱重啟很慢而影響開發效率,筆者建議直接在POM移除spring-boot-devtools
依賴,然后使用Control+Shift+F9進行免啟動快速更新!!
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> </dependency>
五、關閉瀏覽器緩存(重要)
打開谷歌瀏覽器,打開F12的Network選項欄,然后勾選【✅】Disable cache 。