在開發中我們修改一個Java檔案後想看到效果不得不重新開機應用,這導緻大量時間花費,我們希望不重新開機應用的情況下,程式可以自動部署(熱部署)。
有以下四種情況,如何能實作熱部署。
【1】模闆引擎
在Spring Boot中開發情況下禁用模闆引擎的cache(如Thymeleaf)
頁面模闆改變ctrl+F9可以重新編譯目前頁面并生效。
如下圖所示,Thymeleaf可以配置的屬性與預設值:
#禁用緩存
spring.thymeleaf.cache=false
修改模闆,然後Ctrl+F9,即可在浏覽器顯示更改後的頁面!
【2】Spring Loaded
Spring官方提供的熱部署程式,實作修改類檔案的熱部署。
下載下傳Spring Loaded(項目位址https://github.com/spring-projects/spring-loaded)。
添加運作時參數;
-javaagent:C:/springloaded-1.2.5.RELEASE.jar –noverify
【3】JRebel
收費的一個熱部署軟體,安裝插件使用即可。
【4】Spring Boot Devtools(推薦)
① 配置執行個體
引入依賴如下官網位址:
<!-- Spring boot 熱部署 : 此熱部署會遇到 java.lang.ClassCastException 異常 -->
<!-- optional=true,依賴不會傳遞,該項目依賴devtools;之後依賴myboot項目的項目如果想要使用devtools,需要重新引入 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
設定idea自動編譯:
這樣,無論修改模闆還是類還是配置檔案,修改後隻要按下Ctrl+F9即可!!其實,觀察控制台,按下Ctrl+F9(即Build)時,DevTools會自動将項目重新開機。
以上示例是在idea中操作,eclipse預設自動編譯,引入依賴後,隻需要儲存即可!
另外,記得開發時在application.yml檔案中設定thymeleaf緩存為false:
spring:
thymeleaf:
cache: false
② 幾點說明
當配置了 devtools 後,我們在classpath修改任何檔案項目都将會自動重新開機。
- 某些資源在更改時不一定需要觸發重新啟動。例如, Thymeleaf 模闆可以就地進行編輯。預設情況下更改資源路徑包括了:
不會觸發重新啟動, 但會觸發實時重新加載。如果逆向排除這些路徑,可以使用如下配置:/META-INF/maven, /META-INF/resources ,/resources ,/static ,/public 或者 /templates
spring.devtools.restart.exclude=static/**,public/**
- 如果要保留這些預設值并添加其他排除項, 請使用
屬性代替。spring.devtools.restart.additional-exclude
- 通過
方法,可以在System.setProperty("spring.devtools.restart.enabled", "false");
方法運作天使用關閉 devtools。SpringApplication.run()
- 當我們再次啟動 App.java 的時候,使用的加載器就變為了 restartedMain 了,說明熱部署已經成功。
注意點:devtools 由于是雙類加載機制,再結合了通用Mapper後可能會出現 java.lang.ClassCastException 異常(例如:說class x.x.A cannot be cast to x.x.A。)。
restart.include.mapper=/mapper-[\\w-\\.]+jar
restart.include.pagehelper=/pagehelper-[\\w-\\.]+jar