devtools熱部署

依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
</dependency>

optional=true, 依賴不會傳遞, 該項目依賴devtools;之後依賴boot項目的項目如果想要使用devtools, 需要重新引入。

application.properties配置:

#熱部署生效
spring.devtools.restart.enabled=true
#設置重啓的目錄,添加那個目錄的文件需要restart
spring.devtools.restart.additional-paths=src/main/java
devtools會監聽classpath下的文件變動,並且會立即重啓應用(發生在保存時機)
因爲其採用的虛擬機機制,該項重啓是很快的
(1)base classloader (Base類加載器):加載不改變的Class,例如:第三方提供的jar包。 
(2)restart classloader(Restart類加載器):加載正在開發的Class。 
爲什麼重啓很快,因爲重啓的時候只是加載了在開發的Class,沒有重新加載第三方的jar包。 

intelli idea配置devtool自動重啓後,代碼不生效的解決方法:

修改了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