目前的Springboot,當發生了任何修改之後,必須關閉後再啓動Application類才能夠生效,顯得略微麻煩。 Springboot提供了熱部署的方式,當發現任何類發生了改變,馬上通過JVM類加載的方式,加載最新的類到虛擬機中。 這樣就不需要重新啓動也能看到修改後的效果了
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional> <!-- 這個需要爲 true 熱部署纔有效 -->
</dependency>
插件:(這個一般建立springboot項目就會有)
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
IDEA配置
當我們修改了Java類後,IDEA默認是不自動編譯的(和elicpse不同),而spring-boot-devtools又是監測classpath下的文件發生變化纔會重啓應用,所以需要設置IDEA的自動編譯:
(1)File->Settings ->Build, Execution, Deployment
(2)ctrl + shift + alt + /,選擇Registry,勾上 Compiler autoMake allow when app running
修改類–>保存:應用會重啓
修改配置文件–>保存:應用會重啓
修改頁面–>保存:應用不會重啓,但會重新加載,頁面會刷新
關於devtools原理
深層原理是使用了兩個ClassLoader,一個Classloader加載那些不會改變的類(第三方Jar包),另一個ClassLoader加載會更改的類,稱爲restart ClassLoader,這樣在有代碼更改的時候,原來的restart ClassLoader 被丟棄,重新創建一個restart ClassLoader,由於需要加載的類相比較少,所以實現了較快的重啓時間。