spring-boot-devtools是一個爲開發者服務的一個模塊,其中最重要的功能就是自動應用代碼更改到最新的App上面去。
原理是在發現代碼有更改以後,從新啓動應用,可是速度比手動中止後再啓動更快。
其深層原理是使用了兩個ClassLoader,一個Classloader加載那些不會改變的類(第三方Jar包),另外一個ClassLoader加載會更改的類,稱爲restart ClassLoader
,這樣在有代碼更改的時候,原來的restart ClassLoader被丟棄,從新建立一個restart ClassLoader,因爲須要加載的類相比較少,因此實現了較快的重啓時間。
即devtools會監聽classpath下的文件變更,而且會當即重啓應用(發生在保存時機)
1、開啓idea自動make功能
一、CTRL + SHIFT + A --> 查找make project automatically --> 選中
二、CTRL + SHIFT + A --> 查找Registry --> 找到並勾選compiler.automake.allow.when.app.running
最後重啓idea
2、使用spring-boot-1.3開始有的熱部署功能
一、加maven依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
二、開啓熱部署
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>//該配置必須
</configuration>
</plugin>
</plugins>
</build>
3、Chrome禁用緩存
F12(或Ctrl+Shift+J或Ctrl+Shift+I)--> NetWork --> Disable Cache(while DevTools is open)
至此,在idea中就能夠愉快的修改代碼了,修改後能夠及時看到效果,無須手動重啓和清除瀏覽器緩存。
測試方法:
1.修改類-->保存:應用會重啓
2.修改配置文件-->保存:應用會重啓
3.修改頁面-->保存:應用會重啓,頁面會刷新(原理是將spring.thymeleaf.cache設爲false)
不能使用分析:
1.對應的spring-boot版本是否正確,我這裏使用的是1.5.3.RELEASE版本;
2.是否加入plugin了,以及屬性<fork>true</fork>
3.Intellij IDEA是否開啓了Make Project Automatically。
4.若是設置SpringApplication.setRegisterShutdownHook(false),則自動重啓將不起做用。
2018-01-15更新 IDEA清空項目緩存,就像Eclipse中的clean同樣的方法
參考: