在開發過程中,當寫完一個功能我們需要運行應用程序測試,可能這個小功能中存在多個小bug
,我們需要改正後重啓服務器,這無形之中拖慢了開發的速度增加了開發時間,SpringBoot
提供了spring-boot-devtools
,使我們在更改應用和配置文件的時候,自動重啓應用!
配置步驟
- 打開pom.xml文件添加依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
只要
classpath
下的文件有變動,它就會自動重啓。這在使用IDE時非常有用,因爲可以很快得到代碼改變的反饋。默認情況下,classpath
下任何指向文件夾的實體都會被監控,注意一些資源的修改比如靜態assets,視圖模板不需要重啓應用。
由於DevTools
監控classpath
下的資源,所以唯一觸發重啓的方式就是更新classpath
。在Eclipse
裏,保存一個修改的文件將引起classpath
更新,並觸發重啓。在IntelliJ IDEA
中,默認是不自動編譯的,我們需要設置自動編譯。
- 設置IDEA自動編譯
(1).快捷鍵Ctrl+Alt+S打開設置,在Build,Execotion,Deployment->Compiler->勾選Build Project automatically項
(2).快捷鍵Ctrl + Shift + Alt + /,選擇Registry
(3).勾選 compiler.automake.allow.when.app running和compiler.document.save.enabled(指定是否啓用保存項目響應當文檔被更改),並將它們的對應的保存動作延時時間適當縮小,或者使用默認值也可以。當然,我沒修改它的默認值的時候,發現項目修改的時候,它自動重新熱啓動的時間有點久(可縮小對應時間或者參考本文下一段解決方法)。
重啓應用,當改動代碼時,觀察控制檯輸出,你會發現Spring Boot已經檢測到了文件變化,並重新啓動,你會發現體驗爲何如此之棒,爽極了!
注意,如果你沒修改保存動作的延時時間或者是IDE閒置時間少於指定的毫秒數,導致了你修改代碼並刷新頁面,發現並沒有改變或者項目沒有重新熱啓動,你可以在你更改的代碼文件處使用快捷鍵ctrl+f9
,重新build project,等待項目重新熱啓動完畢,然後再刷新頁面即可。
如果你使用的是模板引擎,由於模板引擎的頁面默認是開啓緩存的,在開發階段可以先將它關閉。
# Thymeleaf的配置:
spring.thymeleaf.cache=false
# FreeMarker的配置:
spring.freemarker.cache=false
# Groovy的配置:
spring.groovy.template.cache=false
# Velocity的配置:
spring.velocity.cache=false
熱啓動與熱部署的區別
熱啓動是指在已經運行的項目上,再次啓動(比如說,做了修改代碼),少加載了一些東西,從而啓動的比快,節省開發時間。
熱部署會啓動自動加載修改代碼的部分,而idea 本身不支持熱部署,需要在idea中安裝插件JRebel。
參考文章
SpringBoot熱啓動讓開發更便捷
Can’t get devtools auto build service working on Windows…