1. 程式人生 > >SpringBoot入門筆記12——devtool熱部署的使用

SpringBoot入門筆記12——devtool熱部署的使用

SpringBoot 熱部署實戰

spring為開發者提供了一個名為spring-boot-devtools的模組來使Spring Boot應用支援熱部署,提高開發者的開發效率,無需手動重啟Spring Boot應用。

熱部署的原理

深層原理是使用了兩個ClassLoader,一個Classloader載入那些不會改變的類(第三方Jar包),另一個ClassLoader載入會更改的類,稱為restart ClassLoader,這樣在有程式碼更改的時候,原來的restart ClassLoader 被丟棄,重新建立一個restart ClassLoader,由於需要載入的類相比較少,所以實現了較快的重啟時間。

如何使用devtool

springboot 使用devtool特別簡單,首先看官網的地址

https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#using-boot-devtools

在專案的pom.xml檔案下新增依賴,

//核心依賴包
<dependency>  
		  <groupId>org.springframework.boot</groupId>  
		  <artifactId>spring-boot-devtools</artifactId>  
		  <optional>true</optional>  
</dependency>

由於DevTools監視類路徑資源,因此觸發重新啟動的唯一方法是更新類路徑。導致更新類路徑的方式取決於您使用的IDE。在eclipse中儲存檔案就會重啟。idea中如果設定自動儲存,每自動儲存一次就會觸發啟動一次。

記錄條件評估中的更改

預設情況下,每次應用程式重新啟動時,都會記錄一個顯示條件評估增量的報告。該報告顯示了在進行更改(例如新增或刪除Bean以及設定配置屬性)時對應用程式的自動配置所做的更改。

要禁用報告的日誌記錄,請設定以下屬性:

spring.devtools.restart.log-condition-evaluation-delta=false

不包括資源(Excluding Resources)

某些資源在更改時不一定需要觸發重啟。例如,可以就地編輯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屬性。

禁用重啟

如果您不想使用重啟功能,可以使用spring.devtools.restart.enabled屬性將其禁用。在大多數情況下,您可以在application.properties中設定此屬性(這樣做仍會初始化重新啟動的類載入器,但它不會監視檔案更改)。

如果需要完全禁用重新啟動支援(例如,因為它不能與特定庫一起使用),則需要在呼叫SpringApplication.run(…)之前將spring.devtools.restart.enabled System屬性設定為false,如如下例所示:

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

使用觸發器檔案(Using a Trigger File)

這個應該很有用,建立一個觸發器檔案來進行熱部署

如果使用不斷編譯已更改檔案的IDE,則可能更喜歡僅在特定時間觸發重新啟動。為此,您可以使用“觸發器檔案”,這是一個特殊檔案,當您想要實際觸發重新啟動檢查時必須對其進行修改。更改檔案只會觸發檢查,只有在Devtools檢測到必須執行某些操作時才會重新啟動。觸發器檔案可以手動更新,也可以使用IDE外掛更新。

要使用觸發器檔案,請將spring.devtools.restart.trigger-file屬性設定為觸發器檔案的路徑。

您可能希望將spring.devtools.restart.trigger檔案設定為全域性設定,以便所有專案的行為方式相同

小結

還有很多功能,還是看官方文件,用到的時候再去查。對於devtool的使用我覺得,使用eclipse 很簡單,ctrl+s就可以了。對於使用Idea 兄弟我覺得使用觸發器檔案是個非常好的方式。

首先在application.properties配置檔案下配置 觸發器檔案的路徑,比如

spring.devtools.restart.trigger-file=trigger.txt

我們在resources資料夾的根目錄建立了一個txt檔案 trigger.txt

裡面內容比如 version=1 其實沒什麼,,只要這個配置檔案更改了,就會觸發devtool去重新檢查啟動。

比如我們更改完我們的程式碼,想使用熱部署,就把1改一下,比如改為2 這個時候就會自動重啟。當然還可以用外掛,自行百度吧