Spring Boot第二彈:Spring Boot熱插拔

Spring Boot熱插拔


小弟剛接觸spring boot不久,僅想通過寫網誌的形式來加深記憶和方便以後查閱。如內容有不正確之處,還望各位大佬海量汪涵,並給小弟指出,共同進步。


1.概述

**由於Spring Boot應用程序只是純java應用程序,所以JVM熱插拔可開箱即用(Spring-boot-devtools)。

spring-boot-devtools模塊可以包含在任何項目中,以提供額外的開發功能,添加maven依賴:**

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

2.屬性默認值

Spring Boot支持的幾個庫使用緩存來提高性能。例如,模塊引擎將編譯的模板存入緩存,以避免重複解析模板文件。此外SpringMVC可以在服務靜態資源時向響應添加Http頭。


3.自動重啓

使用spring-boot-devtools會在類路徑上的文件發生更改時自動重新啓動。但默認情況下有些資源(如靜態資源和視圖模板)不需要重新啓動應用程序。


3.1觸發重新啓動

當DevTools監視類路徑資源時,觸發重新啓動的唯一方法是更新類路徑。

DevTools的工作依賴於應用程序上下文的shutdown hook,如果禁用了shutdown hook,在application配置文件中配置SpringApplication.setRegisterShutdownHook(false),將無法正常工作。


3.2重新啓動與重新加載

Spring Boot提供的重新啓動技術使用兩個類加載器。不更改的類(如,第三方jar)被加載到基類加載器中;正在積極開發的類被加載到重新啓動類加載器中。當應用程序重新啓動時,重新啓動類加載器將被丟棄,並重新創建一個重新啓動類加載器。

如果重新啓動不夠快或者類加載有問題,可採用重新加載技術。


4.排除加載資源

在開發中某些資源在更改時不一定需要觸發重新啓動,可使用自定義排除項,spring.devtools.restart.exclude屬性來排除。

如:spring.devtools.restart.exclude = static/**

如果要保留默認值然後添加排除項,可使用spring.devtools.restart.additional-exclude屬性。


5.添加附加路徑

當對不在類路徑中的文件進行更改時,可能需要重新啓動或重新加載應用程序。可在application配置文件中使用spring.devtools.restart.additional-paths屬性配置其它路徑來更改監視。


6.禁用重新啓動

如果不想使用重新啓動功能,可使用spring.devtools.restart.enabled屬性來禁用。

如:
public static void main(String[] args) {
System.setProperty("spring.devtools.restart.enabled", "false");
 SpringApplication.run(MyApp.class, args);
}

7.自定義重新啓動類加載器

如上述所講,重新啓動類功能通過使用兩個類加載器來實現的,對於大多數應用程序來說,該形式很好。

默認情況下,IDE或Eclipse中任何打開的項目都將使用“重新啓動”類加載器加載,如果在多模塊項目上工作,而不是將每個模塊都導入IDE或Eclipse中,則可能需要自定義事件。

可創建一個META-INF/spring-devtools.properties文件,該文件包含restart.exclude.和restart.include.前綴屬性。include表示放入到類加載器的項目(更改後不自動啓動),exclude表示不放入到類加載器的項目。


8.缺陷

重新啓動功能對使用標準反序列化的對象無效。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章