spring boot開發過程中,經常需要調試接口,修改代碼之後需要重啓使之成效,比較耗時; spring boot提供了熱部署的方式;
原理:spring boot使用兩個classloader:不改變的類(如第三方jar)由base類加載器加載,正在開發的類由restart類加載器加載。應用重啓時,restart類加載器被扔掉重建,而基類加載器不變,這種方法意味着應用程序重新啓動通常比“冷啓動”快得多,因爲基類加載器已經可用並已填充。當我們開啓devtools後,類路徑中的文件變化會導致應用自動重啓;
其深層原理是使用了兩個類加載器,一個類加載器加載那些不會改變的類(第三方的罐包),另外一個類加載器加載會更改的類,稱爲重啓類加載器。
這樣在有代碼更改的時候,原來的重啓類加載器被丟棄,重新創建一個重啓類加載器,由於需要加載的類相比較少,所以實現了更快的重啓時間(5秒左右)
引用依賴和插件
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<version>2.0.3.RELEASE</version>
</dependency>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!-- fork:如果沒有該配置,這個devtools不會起作用,即應用不會restart -->
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>
spring-boot-devtools 在遠程應用程序上 啓用存在安全風險。您永遠不應該在生產部署上啓用支持。 |
修改IDEA的操作參考以下的博客: