Spring Boot 熱部署(3)
熱部署:當發現程序修改時自動啟動應用程序。
spring boot為開發者提供了一個名為spring-boot-devtools的模塊來使sring boot應用支持熱部署,提高開發者的開發效率,無需手動重啟spring boot應用程序。
devtools的原理
深層原理是使用了兩個ClassLoader,一個ClassLoader加載那些不會改變的類(第三方jar包),另一個ClassLoader加載會更改的類,稱為restart ClassLoader,這樣在有代碼更改的時候,原來的restart ClassLoader會被丟棄,重新創建一個restart ClassLoader,由於需要加載的類比較少,所以實現了較快的重啟時間。
在pom.xml中添加依賴:
<!--熱部署 --> <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>
說明:
devtools可以實現頁面熱部署,實現類文件熱部署,實現對屬性文件的熱部署。即devtools會監聽classpath下文件的變動,不過這種方式是屬於項目重啟,會清空session中的值,也就是如果有用戶登陸的話,項目重啟要重新登陸。
默認情況下,/META-INF/maven,/META-INF/resources,/resources,/static,/templates,/public這些文件夾下的文件修改不會使應用重啟,但是會重新加載(devtools內嵌了一個LiveReload server,當資源發生改變時,瀏覽器刷新)。
Idea設置
當我們修改了Java類後,IDEA默認是不自動編譯的,而spring-boot-devtools又是監測classpath下的文件發生變化才會重啟應用,所以需要設置IDEA的自動編譯.
other settings -> default settings.
command+shift+a 全局搜索
找到compiler.automake.allow.when.app.running,勾上開啟此功能即可
此時重啟項目即可生效,改動代碼不用重啟項目了
Spring Boot 熱部署(3)