springboot--- devtools(熱部署)
阿新 • • 發佈:2018-11-04
技術介紹
- devtools:是boot的一個熱部署工具,當我們修改了classpath下的檔案(包括類檔案、屬性檔案、頁面等)時,會重新啟動應用(由於其採用的雙類載入器機制,這個啟動會非常快,如果發現這個啟動比較慢,可以選擇使用jrebel)
- 雙類載入器機制:boot使用了兩個類載入器來實現重啟(restart)機制:base類載入器(簡稱bc)+restart類載入器(簡稱rc)。
- bc:用於載入不會改變的jar(eg.第三方依賴的jar)
- rc:用於載入我們正在開發的jar(eg.整個專案裡我們自己編寫的類)。當應用重啟後,原先的rc被丟掉、重新new一個rc來載入這些修改過的東西,而bc卻不需要動一下。這就是devtools重啟速度快的原因。
- 雙類載入器機制:boot使用了兩個類載入器來實現重啟(restart)機制:base類載入器(簡稱bc)+restart類載入器(簡稱rc)。
在使用IDEA做SpringBoot的web專案的時候,在每一次修改了java檔案或者是resource的時候,都必須去重啟一下專案,這樣的話浪費了很多的時間(主要是心理感覺非常煩),那麼,這個時候,就需要去實現程式的熱部署,能夠在修改了頁面的時候能夠立馬重新整理顯現出新的效果。
Eclispe
<!--spring-boot-devtools 熱啟動依賴包--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> <scope>true</scope> </dependency>
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!--fork : 如果沒有該項配置,肯定devtools不會起作用,即應用不會restart --> <fork>true</fork> </configuration> </plugin>
修改程式碼後,儲存Ctrl+S即可
IDEA
第一步:新增熱部署的maven依賴
<!--spring-boot-devtools 熱啟動依賴包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
<scope>true</scope>
</dependency>
第二步:新增maven外掛(一般情況下假如用maven管理建立springboot程式的時候,就會自帶這個外掛的,所以你可以對比一下是否有或者一樣,不一樣進行修改)。
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--fork : 如果沒有該項配置,肯定devtools不會起作用,即應用不會restart -->
<fork>true</fork>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
第三步:修改IDEA的設定File--->Other Settings--->Default Settings----->Compiler--->Bulid project automatically打上勾,就按照下圖的勾去選擇就行了(勾選完畢之後,一定記得點選Apply和Ok按鈕使你的選擇生效)。
第四步:開啟IDEA,組合鍵Ctrl+Shift+Alt+/,彈出下面介面,選擇Registry
或者是按住組合鍵Ctrl+Shift+A,彈出下面介面,輸入Registry,選擇第一個Registry
第五步:選擇Registry,勾選complier.automake.allow.when.app.running
第六步:由於在開發過程當中經常會修改html、js和css,但是瀏覽器是有快取的,我們在開發過程當中可以關閉瀏覽器的快取功能,一般是F12喚出開發者工具,然後勾選Disable cache
第七步:在springboot的application.properties檔案當中新增下面語句
spring.thymeleaf.cache=false
第八步,修改完程式碼後需要編譯,而不是儲存
補充:
- 預設情況下,/META-INF/maven,/META-INF/resources,/resources,/static,/templates,/public這些資料夾下的檔案修改不會使應用重啟,但是會重新載入(devtools內嵌了一個LiveReload server,當資源發生改變時,瀏覽器重新整理)。
- 如果想改變預設的設定,可以自己設定不重啟的目錄:spring.devtools.restart.exclude=static/**,public/**,這樣的話,就只有這兩個目錄下的檔案修改不會導致restart操作了。
- 如果要在保留預設設定的基礎上還要新增其他的排除目錄:spring.devtools.restart.additional-exclude
- 如果想要使得當非classpath下的檔案發生變化時應用得以重啟,使用:spring.devtools.restart.additional-paths,這樣devtools就會將該目錄列入了監聽範圍。