天天看點

SpringBoot - 項目熱部署與devtools

在開發中我們修改一個Java檔案後想看到效果不得不重新開機應用,這導緻大量時間花費,我們希望不重新開機應用的情況下,程式可以自動部署(熱部署)。

有以下四種情況,如何能實作熱部署。

【1】模闆引擎

在Spring Boot中開發情況下禁用模闆引擎的cache(如Thymeleaf)

頁面模闆改變ctrl+F9可以重新編譯目前頁面并生效。

如下圖所示,Thymeleaf可以配置的屬性與預設值:

SpringBoot - 項目熱部署與devtools
#禁用緩存
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

收費的一個熱部署軟體,安裝插件使用即可。

SpringBoot - 項目熱部署與devtools

【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自動編譯:

SpringBoot - 項目熱部署與devtools

這樣,無論修改模闆還是類還是配置檔案,修改後隻要按下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");​

    ​ 方法,可以在​

    ​SpringApplication.run()​

    ​方法運作天使用關閉 devtools。
  • 當我們再次啟動 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