導入依賴:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
Developer tools are automatically disabled when running a fully packaged application. If your application is launched from java -jar or if it is started from a special classloader, then it is considered a “production application”. If that does not apply to you (i.e. if you run your application from a container), consider excluding devtools or set the -Dspring.devtools.restart.enabled=false system property.(運行完全打包的應用程序時,將自動禁用開發人員工具。 如果您的應用程序是從java -jar啟動的,或者是從特殊的類加載器啟動的,則將其視為“生產應用程序”。 如果這不適用於您(即,如果您從容器中運行應用程序),請考慮排除devtools或設置-Dspring.devtools.restart.enabled = false系統屬性。
)
1.屬性默認值
Spring Boot支持的一些庫使用緩存來提高性能。例如,模板引擎緩存已編譯的模板,以避免重復解析模板文件。另外,Spring MVC可以在提供靜態資源時向響應添加HTTP緩存頭。
盡管緩存在生產中非常有益,但在開發過程中可能適得其反,從而使您無法看到剛剛在應用程序中所做的更改。因此,默認情況下,spring-boot-devtools禁用緩存選項。
緩存選項通常由application.properties
文件中的設置配置。例如,Thymeleaf提供了該spring.thymeleaf.cache
屬性。
spring.thymeleaf.cache=false;
由於在開發Spring MVC和Spring WebFlux應用程序時需要有關Web請求的更多信息,因此開發人員工具將啟用DEBUG
日志web
記錄組的日志記錄。這將為您提供有關傳入請求,正在處理的處理程序,響應結果等的信息。如果您希望記錄所有請求的詳細信息(包括潛在的敏感信息),則可以打開spring.http.log-request-details
配置屬性。
spring.http.log-request-details=true;
如果你不想被應用屬性默認可以設置spring.devtools.add-properties
到false
你application.properties
。
2.自動重啟
spring-boot-devtools
只要類路徑上的文件發生更改,使用的應用程序就會自動重新啟動。在IDE中工作時,這可能是一個有用的功能,因為它為代碼更改提供了非常快速的反饋循環。默認情況下,將監視類路徑上指向文件夾的任何條目的更改。請注意,某些資源(例如靜態資產和視圖模板)不需要重新啟動應用程序。
注:
1.DevTools依靠應用程序上下文的關閉掛鈎在重新啟動期間將其關閉。如果您禁用了關機掛鈎(SpringApplication.setRegisterShutdownHook(false)
),它將無法正常工作。
2.當決定是否在類路徑中的條目應該觸發重新啟動時,它的變化,DevTools自動忽略命名的項目spring-boot
,spring-boot-devtools
,spring-boot-autoconfigure
,spring-boot-actuator
,和spring-boot-starter.
3.DevTools需求來定制ResourceLoader
使用的ApplicationContext
。如果您的應用程序已經提供了,它將被包裝。不支持直接覆蓋getResource
方法ApplicationContext.
2.1重新啟動與重新加載
Spring Boot提供的重啟技術通過使用兩個類加載器來工作。不變的類(例如,來自第三方jar的類)將被加載到基類加載器中。您正在積極開發的類將加載到重新啟動類加載器中。重新啟動應用程序時,將丟棄重新啟動類加載器,並創建一個新的類加載器。這種方法意味着應用程序的重啟通常比“冷啟動”要快得多,因為基本類加載器已經可用並已填充。
如果發現重新啟動對於您的應用程序來說不夠快,或者遇到類加載問題,則可以考慮從ZeroTurnaround 重新加載技術,例如JRebel。這些方法通過在加載類時重寫類來使其更易於重新加載。
2.2記錄條件評估中的更改
默認情況下,每次應用程序重新啟動時,都會記錄一個報告,其中顯示了條件評估增量。該報告顯示了在進行更改(例如添加或刪除Bean以及設置配置屬性)時對應用程序自動配置的更改。
要禁用報告的日志記錄,請設置以下屬性:
spring.devtools.restart.log-condition-evaluation-delta = false
2.3排除資源
某些資源在更改時不一定需要觸發重新啟動。例如,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.4監視其它路徑
使用該spring.devtools.restart.additional-paths
屬性配置其他路徑以監視更改。您可以使用前面描述的spring.devtools.restart.exclude
屬性來控制其他路徑下的更改是觸發完全重新啟動還是實時重新加載。
2.5禁用重啟
如果您不想使用重新啟動功能,則可以使用該spring.devtools.restart.enabled
屬性將其禁用。在大多數情況下,您可以在自己的屬性中設置此屬性application.properties
(這樣做仍會初始化重新啟動類加載器,但它不會監視文件更改)。
如果您需要完全禁用重啟支持(例如,因為它不適用於特定的庫),則需要在調用之前將spring.devtools.restart.enabled
System
屬性設置為,如以下示例所示:false
SpringApplication.run(…)
public static void main(String[] args) { System.setProperty("spring.devtools.restart.enabled", "false"); SpringApplication.run(MyApp.class, args); }
2.6使用觸發文件
如果使用持續編譯更改文件的IDE,則可能更喜歡僅在特定時間觸發重新啟動。為此,您可以使用“觸發文件”,這是一個特殊文件,當您要實際觸發重新啟動檢查時必須對其進行修改。
對文件的任何更新都將觸發檢查,但是只有在Devtools檢測到有事情要做的情況下,重啟才真正發生。 |
要使用觸發文件,請將spring.devtools.restart.trigger-file
屬性設置為觸發文件的名稱(不包括任何路徑)。觸發文件必須出現在類路徑上的某個位置。
例如,如果您的項目具有以下結構:
src +-main +-resources +-.reloadtrigger
那么您的trigger-file
財產將是:
spring.devtools.restart.trigger-file=.reloadtrigger
現在,僅在src/main/resources/.reloadtrigger
更新時才會重新啟動。
您可能希望將其設置spring.devtools.restart.trigger-file 為全局設置,以便所有項目以相同的方式運行。 |
2.7自定義重啟類加載器
默認情況下,IDE中任何打開的項目都使用“重新啟動”類加載器加載,而任何常規.jar
文件都使用“基本”類加載器加載。如果您在多模塊項目上工作,並且並非每個模塊都導入到IDE中,則可能需要自定義內容。為此,您可以創建一個META-INF/spring-devtools.properties
文件。
該spring-devtools.properties
文件可以包含以restart.exclude
和為前綴的屬性restart.include
。該include
元素是應該被拉高到“重啟”的類加載器的項目,以及exclude
要素是應該向下推入“基地”類加載器的項目。該屬性的值是應用於類路徑的正則表達式模式,如以下示例所示:
restart.exclude.companycommonlibs=/mycorp-common-[\\w\\d-\.]+\.jar restart.include.projectcommon=/mycorp-myproj-[\\w\\d-\.]+\.jar
所有屬性鍵都必須是唯一的。只要屬性以restart.include. 或開始,restart.exclude. 就可以考慮。 |
所有META-INF/spring-devtools.properties 從類路徑加載。您可以將文件打包到項目內部,也可以打包到項目使用的庫中。 |
2.8局限性
重新啟動功能不適用於通過使用標准反序列化的對象ObjectInputStream
。如果你需要反序列化的數據,你可能需要使用Spring的ConfigurableObjectInputStream
結合Thread.currentThread().getContextClassLoader()。
不幸的是,一些第三方庫在不考慮上下文類加載器的情況下反序列化。如果發現這樣的問題,則需要向原始作者請求修復。
3.LiveReload
該spring-boot-devtools
模塊包括一個嵌入式LiveReload服務器,該服務器可用於在更改資源時觸發瀏覽器刷新。可從livereload.com免費獲得適用於Chrome,Firefox和Safari的LiveReload瀏覽器擴展。
如果您不想在應用程序運行時啟動LiveReload服務器,則可以將spring.devtools.livereload.enabled
屬性設置為false
。
可以通過將以下任何文件添加到$HOME/.config/spring-boot
文件夾來配置全局devtools設置:
-
spring-boot-devtools.properties
-
spring-boot-devtools.yaml
-
spring-boot-devtools.yml
添加到這些文件的任何屬性都將應用於使用devtools的計算機上的所有 Spring Boot應用程序。例如,要將重新啟動配置為始終使用觸發文件,應添加以下屬性:
spring.devtools.restart.trigger-file=.reloadtrigger
注:如果在中找不到devtools配置文件$HOME/.config/spring-boot
,則在$HOME
文件夾的根目錄中搜索是否存在.spring-boot-devtools.properties
文件。這使您可以與不支持該$HOME/.config/spring-boot
位置的舊版Spring Boot上的應用程序共享devtools全局配置
在上述文件中激活的配置文件不會影響特定於配置文件的配置文件的加載。