您好,登錄后才能下訂單哦!
Spring DevTools 介紹
Spring Boot包括一組額外的工具,可以使應(yīng)用程序開發(fā)體驗(yàn)更加愉快。spring-boot-devtools
模塊可以包含在任何項(xiàng)目中,它可以節(jié)省大量的時(shí)間。 想要使用devtools支持,只需將模塊依賴關(guān)系添加到你的構(gòu)建中:
Maven.
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> </dependencies>
Gradle.
dependencies { compile("org.springframework.boot:spring-boot-devtools") }
運(yùn)行打包的應(yīng)用程序時(shí),開發(fā)人員工具會(huì)自動(dòng)禁用。如果你通過java -jar
或者其他特殊的類加載器進(jìn)行啟動(dòng)時(shí),都會(huì)被認(rèn)為是“生產(chǎn)環(huán)境的應(yīng)用”。
將依賴標(biāo)記為optional
可選是一種最佳做法,可以防止將devtools依賴傳遞到其他模塊中。Gradle 不支持開箱即用的optional依賴項(xiàng),你可以參考propdeps-plugin
。
一、屬性默認(rèn)值
Spring Boot 支持的一些庫中會(huì)使用緩存來提高性能。例如模版引擎將緩存編譯后的模板,以避免重復(fù)解析模板文件。 此外,Spring MVC可以在服務(wù)靜態(tài)資源時(shí)向響應(yīng)中添加HTTP緩存頭。
雖然緩存在生產(chǎn)中非常有益,但它在開發(fā)過程中可能會(huì)產(chǎn)生反效果,它會(huì)阻止你看到剛剛在應(yīng)用程序中進(jìn)行的更改。 因此,spring-boot-devtools將默認(rèn)禁用這些緩存選項(xiàng)。
緩存選項(xiàng)通常在application.properties
文件中配置。 例如,Thymeleaf提供了spring.thymeleaf.cache
屬性。spring-boot-devtools
模塊不需要手動(dòng)設(shè)置這些屬性,而是自動(dòng)應(yīng)用合理的開發(fā)時(shí)配置。
二、自動(dòng)重啟
spring-boot-devtools
會(huì)在類路徑上的文件發(fā)生更改時(shí)自動(dòng)重啟。 這在IDE中工作時(shí)可能是一個(gè)有用的功能,因?yàn)樗鼮榇a更改提供了非??斓姆答佈h(huán)。 默認(rèn)情況下會(huì)監(jiān)視類路徑上的所有變動(dòng),但請(qǐng)注意,某些資源(如靜態(tài)資源和視圖模板)不需要重啟應(yīng)用程序。
觸發(fā)重啟
當(dāng)DevTools監(jiān)視類路徑資源時(shí),觸發(fā)重啟的唯一方法是更新類路徑。 導(dǎo)致類路徑更新的方式取決于你正在使用的IDE。在Eclipse中,保存修改的文件將導(dǎo)致類路徑被更新并觸發(fā)重啟。 在IntelliJ IDEA中,構(gòu)建項(xiàng)目( Build -> Make Project )將具有相同的效果。
重新啟動(dòng)和重新加載
Spring Boot提供的重新啟動(dòng)技術(shù)使用了兩個(gè)類加載器。 不改變的類(例如,來自第三方j(luò)ar的)被加載到 base 類加載器中。 你正在開發(fā)的類被加載到 restart 類加載器中。 當(dāng)應(yīng)用程序重啟時(shí), restart加載器將被丟棄,并創(chuàng)建一個(gè)新的類加載器。 這種方法意味著應(yīng)用程序重啟通常比“冷啟動(dòng)”快得多,因?yàn)?base 加載器已經(jīng)已加載并且可用。
1. 排除資源
某些資源在更改時(shí)不一定需要觸發(fā)重啟。 例如,可以直接編輯Thymeleaf模板。 默認(rèn)情況下,更改/META-INF/maven , /META-INF/resources , /resources , /static , /public或/templates中的資源不會(huì)觸發(fā)重啟,但會(huì)觸發(fā)實(shí)時(shí)重新加載。 如果要自定義這些排除項(xiàng),可以使用spring.devtools.restart.exclude屬性。 例如,要僅排除/static和/public你將設(shè)置以下內(nèi)容:
spring.devtools.restart.exclude = static / **,public / **
如果你想保留上面的默認(rèn)(情況下的)值并添加其他的排除項(xiàng),你可以使用spring.devtools.restart.additional-exclude
屬性。
2. 監(jiān)控額外的路徑
當(dāng)你對(duì)不在類路徑中的文件進(jìn)行更改時(shí),可能需要重啟或重新加載應(yīng)用程序。 為此,請(qǐng)使用spring.devtools.restart.additional-paths屬性來配置監(jiān)視其他路徑的更改。 你可以使用上述的spring.devtools.restart.exclude屬性來控制附加路徑下的更改是否會(huì)觸發(fā)完全重啟或只是實(shí)時(shí)重新加載 。
3. 禁用重啟
如果不想使用重啟功能,可以使用spring.devtools.restart.enabled
屬性來禁用它。 在大多數(shù)情況下,你可以在application.properties
中設(shè)置此項(xiàng)(這仍將初始化重啟類加載器,但不會(huì)監(jiān)視文件更改)。
例如,如果你需要完全禁用重啟支持,因?yàn)樗贿m用于特定庫,則需要在調(diào)用SpringApplication.run(…)
之前設(shè)置System
屬性。 例如:
public static void main(String[] args) { System.setProperty("spring.devtools.restart.enabled", "false"); SpringApplication.run(MyApp.class, args); }
4. 使用觸發(fā)文件
如果你使用自動(dòng)編譯已更改文件的IDE,則可能希望僅在特定時(shí)間觸發(fā)重啟。 為此,你可以使用“觸發(fā)文件”,這是一個(gè)特殊文件,當(dāng)你要實(shí)際觸發(fā)重啟檢查時(shí),必須修改它。 更改文件只會(huì)觸發(fā)檢查,只有在Devtools檢測(cè)到它必須執(zhí)行某些操作時(shí)才會(huì)重啟。 觸發(fā)文件可以手動(dòng)更新,也可以通過IDE插件更新。
要使用觸發(fā)器文件,請(qǐng)使用spring.devtools.restart.trigger-file
屬性。
如果你希望將spring.devtools.restart.trigger-file設(shè)置為全局配置,可以參考下面第四小節(jié)。
5. 自定義重啟類加載器
如上面重新啟動(dòng)和重新加載部分所述,重啟功能是通過使用兩個(gè)類加載器實(shí)現(xiàn)的。 對(duì)于大多數(shù)應(yīng)用程序,此方法運(yùn)行良好,但有時(shí)可能會(huì)導(dǎo)致類加載問題。
默認(rèn)情況下,IDE中的任何打開的項(xiàng)目都會(huì)使用“restart”類加載器加載,任何常規(guī).jar
文件將使用“base”類加載器加載。 如果你在多模塊項(xiàng)目上工作,但不是每個(gè)模塊都導(dǎo)入到IDE中,則可能需要自定義配置。 為此,你可以創(chuàng)建一個(gè)META-INF/spring-devtools.properties
文件。
spring-devtools.properties
文件可以包含restart.exclude.
和restart.include.
前綴的屬性。 include
元素是應(yīng)該被放入“restart”類加載器的項(xiàng)目,exclude
元素是應(yīng)該放入“base”類加載器的項(xiàng)目。 屬性的值是應(yīng)用于類路徑下的正則表達(dá)式。
例如:
restart.exclude.companycommonlibs=/mycorp-common-[\\w-]+\.jar restart.include.projectcommon=/mycorp-myproj-[\\w-]+\.jar
針對(duì)通用Mapper,可以做如下配置:
restart.include.mapper=/mapper-[\\w-\\.]+jar
所有屬性的鍵值(名字,companycommonlibs 部分)必須是唯一的,只有restart.exclude.
和restart.include.
開頭的屬性有效。
所有類路徑下面的META-INF/spring-devtools.properties
配置文件都會(huì)生效,所以你可以把該配置打包到每個(gè)模塊中。
注:新版本的Mapper(3.4.1+)會(huì)默認(rèn)增加該配置。
6. 已知限制
重啟功能對(duì)使用標(biāo)準(zhǔn)ObjectInputStream
對(duì)象序列化的對(duì)象不是很好 。如果需要反序列化數(shù)據(jù),可能需要使用Spring的ConfigurableObjectInputStream
配合Thread.currentThread().getContextClassLoader()
使用。
不幸的是,一些第三方庫都不考慮在使用上下文類加載器的情況下反序列化。 如果你發(fā)現(xiàn)這樣的問題,你需要向原作者請(qǐng)求修復(fù)。
三、實(shí)時(shí)加載
spring-boot-devtools
模塊包含嵌入式LiveReload服務(wù)器,可以在資源更改時(shí)用于觸發(fā)瀏覽器刷新。 LiveReload瀏覽器擴(kuò)展程序支持Chrome,F(xiàn)irefox和Safari,你可以從livereload.com免費(fèi)下載。
如果你不想在應(yīng)用程序運(yùn)行時(shí)啟動(dòng)LiveReload服務(wù)器,則可以將spring.devtools.livereload.enabled
屬性設(shè)置為false
。
同一時(shí)間只能運(yùn)行一個(gè)LiveReload服務(wù)器。 開始應(yīng)用程序之前,請(qǐng)確保沒有其他LiveReload服務(wù)器正在運(yùn)行。如果從IDE啟動(dòng)多個(gè)應(yīng)用程序,則只有第一個(gè)應(yīng)用程序?qū)⒅С諰iveReload。
四、全局設(shè)置
你可以通過向$HOME
文件夾添加名為.spring-boot-devtools.properties
的文件來配置全局devtools設(shè)置(請(qǐng)注意,文件名以“.”開頭)。 添加到此文件的任何屬性將適用于你的計(jì)算機(jī)上使用devtools的所有 Spring Boot應(yīng)用程序。 例如,要配置重啟始終使用觸發(fā)器文件 ,你可以添加以下內(nèi)容:
/.spring-boot-devtools.properties。
spring.devtools.reload.trigger-file=.reloadtrigger
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)億速云的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。