在實際的項目開發過中,當我們修改了某個java類文件時,需要手動重新編譯、然后重新啟動程序的,整個過程比較麻煩,特別是項目啟動慢的時候,更是影響開發效率。其實Spring Boot的項目碰到這種情況,同樣也同樣需要經歷重新編譯、重新啟動程序的過程。 只不過 Spring Boot 提供了一個spring-boot-devtools的模塊,使得 Spring Boot應用支持熱部署,無需手動重啟Spring Boot應用,,提高開發者的開發效率
一、原理
devtools 使用了兩個類加載器(ClassLoader),一個是 Base類加載器(base classloader ):加載那些不會改變的類,如:第三方Jar包等,而另一個是 Restart類加載器(restart classloader):負責加載那些正在開發的會改變的類。這樣在有代碼更改的時候,因為重啟的時候只是加載了在開發的Class類,沒有重新加載第三方的jar包,所以實現了較快的重啟時間。
devtools 監聽classpath下的文件變動(發生在保存時機),並且會立即重啟應用。從而實現類文件和屬性文件的熱部署。
二、快速配置
1、pom配置
引入devtools的依賴
注意:optional=true, 依賴不會傳遞, 該項目依賴devtools;之后依賴boot項目的項目如果想要使用devtools, 需要重新引入。
2、application.properties配置
在application.properties中配置devtools。
關閉緩存即時刷新
spring.thymeleaf.cache=false
熱部署生效
spring.devtools.restart.enabled=true
設置重啟的目錄
spring.devtools.restart.additional-paths=src/main/java
classpath目錄下的WEB-INF文件夾內容修改不重啟
spring.devtools.restart.exclude=WEB-INF/**
說明:
devtools可以實現頁面熱部署,即頁面修改后會立即生效,需要將application.properties文件中配置spring.thymeleaf.cache=false。
devtools會監聽classpath下的文件變動,並且會立即重啟應用。
3、IDEA配置
如果idea是新安裝的或者之前就沒有配置過,發現改變代碼項目熱部署不成功。當我們修改了Java類后,IDEA默認是不自動編譯的,而spring-boot-devtools又是監測classpath下的文件發生變化才會重啟應用。
所以需要設置IDEA的自動編譯:
(1)File-Settings-Compiler-Build Project automatically
(2)ctrl + shift + alt + /,選擇Registry,勾上 Compiler autoMake allow when app running
這樣,就可以使用devtools實現熱部署了。
好的熱部署讓開發調試事半功倍,這樣的“神技能”怎么能錯過呢, 使用過IDEA的童鞋趕緊進來擼一把吧。 https://www.jianshu.com/p/f658fed35786
學習目標
快速學會在項目中使用熱部署插件運行項目,提高開發效率。
快速查閱
相關教程: IDEA快速入門教程(2018圖文版)
專題閱讀:《SpringBoot 布道系列》
具體步驟
一、開啟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插件->目標項目->勾選熱更新。

四、在項目添加熱部署插件(可選)
溫馨提示:
如果因為舊項目十分臃腫,導致每次都自動熱重啟很慢而影響開發效率,筆者建議直接在POM移除spring-boot-devtools
依賴,然后使用Control+Shift+F9進行手工免啟動快速更新!!
具體步驟:在POM文件添加熱部署插件
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
五、關閉瀏覽器緩存(重要)
打開谷歌瀏覽器,打開F12的Network選項欄,然后勾選【✅】Disable cache 。

熱部署到底有多爽呢,用渣渣輝的話來說,只需體驗三分鍾,你就會干我一樣,愛上這款呦西。