SpringBoot 4.SpringBoot 整合 devtools 實現熱部署


一、添加 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>

  當配置了 devtools 后,我們在classpath修改任何文件項目都將會自動重啟。

  (1)某些資源在更改時不一定需要觸發重新啟動。例如, Thymeleaf 模板可以就地進行編輯。默認情況下更改資源路徑包括了:/META-INF/maven/META-INF/resources ,/resources ,/static ,/public 或者 /templates 不會觸發重新啟動, 但會觸發實時重新加載。

如果逆向排除這些路徑,可以使用如下配置:

  spring.devtools.restart.exclude=static/**,public/**

  (2)如果要保留這些默認值並添加其他排除項, 請使用 spring.devtools.restart.additional-exclude 屬性代替。

  (3)通過 System.setProperty("spring.devtools.restart.enabled", "false"); 方法,可以在SpringApplication.run()方法運行天使用關閉 devtools。

  (4)當我們再次啟動 App.java 的時候,使用的加載器就變為了 restartedMain 了,說明熱部署已經成功。

   注意點:devtools 由於是雙類加載機制,再結合了通用Mapper后可能會出現 java.lang.ClassCastException 異常(例如:說class x.x.A cannot be cast to x.x.A。)。

  解決方案就如下:

  在 src/main/resources 中創建 META-INF 目錄,在此目錄下添加 spring-devtools.properties 配置,內容如下:

  restart.include.mapper=/mapper-[\\w-\\.]+jar
  restart.include.pagehelper=/pagehelper-[\\w-\\.]+jar

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM