1. 程式人生 > >SpringBoot專案的熱部署 idea

SpringBoot專案的熱部署 idea

熱部署可以使修改程式碼後,無須重啟伺服器,就可以載入更改的程式碼。

第1種:修改伺服器配置,使得IDEA視窗失去焦點時,更新類和資源

選單Run->EditConfiguration,然後配置指定的伺服器下,右側server標籤下on frame deactivation=Update classes and resource.

缺點:基於JVM提供的熱載入僅支援方法塊程式碼修改,只有debug模式下,並且是在idea失去焦點時才會觸發熱載入,相對載入速度緩慢。

第2種:使用springloaded jar包

啟動應用時新增JVM啟動引數:

-javaagent:/home/lkqm/.m2/repository/org/springframework/springloaded/1.2.7.RELEASE/springloaded-1.2.7.RELEASE.jar -noverify

支援成員級別的修改,支援對列舉的修改。

第3種:使用spring-boot-devtools提供的開發者工具

在pom中加入依賴

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
</dependency>

將依賴標記為optional可以防止將devtools依賴傳遞到其他模組中。

第4種:使用Jrebel外掛

最後3種方法是基於類載入機制實現載入的,因此你修改完程式碼後必須重新編譯當前程式碼,才能觸發熱部署,Eclipse預設就支援自動編譯,而在IDea中預設是關閉的,設定以下兩項設定開啟:

(1)“File"->"Settings"->"Build, Execution, Deplyment"->"Compiler"中勾選“build project automatically”

(2)組合鍵:shift+ctrl+alt+/: regsitry->勾選compiler.automake.allow.when.app.running.

devtools屬性預設值

Spring Boot支援的一些庫中會使用快取來提高效能,例如模板引擎將編譯後的模板,以避免重複解析模板檔案。此外,Spring MVC可以在靜態資源響應中新增HTTP快取頭。

雖然快取在生產中非常有益,但它在開發過程中可能會產生反效果,它會阻止你看到剛剛在應用程式中進行的更改。因此,spring-boot-devtools將預設禁用這些快取選項。

快取選項通常在application.properties檔案中配置,例如,Thymeleaf提供了spring.thymeleaf.cache屬性。spring-boot-devtools模組不需要手動設定這些屬性,而是自動應用合理的開發時配置。

devtools自動重啟

spring-boot-devtools會在類路徑上的檔案發生更改時自動重啟。預設情況下會監視類路徑上的所有變動,但請注意,某些資源(如靜態資源和檢視模板)不需要重啟應用程式。

1.排除資源

某些資源在更儘管時不一定需要觸發重啟。例如,可以直接編輯Thymeleaf模板。預設情況下,更改/META-INF/maven,/META-INF/resources, /resources, /static, /public或/templates中的資源不會觸發重啟,但會觸發實時重新載入。如果要自定義這些排除項,可以使用spring.devtools.restart.exclude屬性。例如,要僅排除/static和/public你將設定以下內容

spring.devtools.restart.exclude = static / **,public / ** 
如果你想保留上面的預設(情況下的)值並新增其他的排除項,你可以使用

spring.devtools.restart.additional-exclude 屬性。

2.監控額外的路徑

當你對不在類路徑中的檔案進行更改時,可能需要重啟或重新載入應用程式。為此,請使用spring.dev.tools.restart.additional-paths屬性來配置監視其他路徑的更改。

3.禁用重啟

可以使用spring.devtools.restart.enabled屬性來禁用它。

最後歡迎大家訪問我的個人網站:1024s​​​​​​​