Spring Boot DevTools使用教程
DevTools通過提供自動重啟和LiveReload功能,使您更快、更輕松地開發(fā)Spring Boot應(yīng)用程序。除此之外,它還將各種屬性設(shè)置為更適合本地開發(fā)的值。此外,它允許您遠(yuǎn)程連接到您的應(yīng)用程序,并仍然使用其大部分功能。在生產(chǎn)中運(yùn)行時,不要使用DevTools。
如何使用DevTools進(jìn)一步加快Spring Boot開發(fā)速度?你需要做的就是添加正確的依賴關(guān)系,與Spring Boot一樣,設(shè)置非常簡單。
如果您使用Maven:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency>
或者,使用Gradle時:
configurations { developmentOnly runtimeClasspath { extendsFrom developmentOnly } } dependencies { developmentOnly("org.springframework.boot:spring-boot-devtools") }
依賴項(xiàng)聲明為可選。這個很重要。這可以防止DevTools依賴性傳遞性地應(yīng)用于依賴于你項(xiàng)目的其他模塊。
自動重啟
每當(dāng)類路徑中的文件發(fā)生更改時,DevTools會自動重新啟動正在運(yùn)行的應(yīng)用程序,并應(yīng)用新的更改。在本地開發(fā)時,這可能很有價值,因?yàn)槟恍枰謩又匦虏渴饝?yīng)用程序。
重啟仍然需要花費(fèi)很多時間,你可能認(rèn)為它不會那么有用,。幸運(yùn)的是,這些重啟比常規(guī)重啟更快,因?yàn)镈evTools使用了一個聰明的技巧。
在開發(fā)應(yīng)用程序時,您通常會更改一個或多個類,并希望檢查正在運(yùn)行的應(yīng)用程序中的結(jié)果以獲得反饋。您更改應(yīng)用程序的一小部分,因?yàn)榇蠖鄶?shù)加載的類來自框架和第三方庫。
,Spring DevTools使用兩個類加載器 - base和restart。base類加載器加載不更改的類。你正在使用的類由restart類加載器加載。每當(dāng)觸發(fā)重啟時,都會重新啟動并重新創(chuàng)建restart的類加載器。這樣重新啟動應(yīng)用程序的速度比平??斓枚啵⑶铱梢允褂肑Rebel等工具作為動態(tài)類重新加載的替代方法。
在IDE中觸發(fā)重新啟動
只要類路徑發(fā)生更改,就會觸發(fā)重新啟動。但是,這取決于您的IDE。這意味著,僅僅更改.java文件是不夠的。重要的是您的IDE實(shí)際上更新.class了類路徑上的文件。
使用IntelliJ IDEA時,您需要構(gòu)建項(xiàng)目(Ctrl + F9或Build→Build Project)。您還可以將IDEA配置為自動重建?;蛘?,需要打開Spring Boot運(yùn)行配置并定義觸發(fā)應(yīng)用程序更新時發(fā)生的情況,Alt + Shift + F10 或F9 進(jìn)行運(yùn)行配置,選擇編輯配置:
在On Update action中選擇Update trigger file,在調(diào)用Update操作時觸發(fā)DevTools的Restart;甚至可以選擇嘗試熱插拔的選項(xiàng),并僅在熱插拔失敗時使用DevTools重新啟動。
在On frame deactivation中選擇Update classes and resources。在IDEA窗口失去焦點(diǎn)時重新加載所有靜態(tài)資源和模板(例如,切換到瀏覽器窗口時)。
確認(rèn)后,修改源碼,切換到瀏覽器,刷新瀏覽器,可以看到更新后的結(jié)果,如果還不行按(Ctrl + F10)強(qiáng)行更新重啟。
僅限開發(fā)
Spring Boot DevTools的用法僅用于開發(fā),而不用于生產(chǎn)。如果您的應(yīng)用程序檢測到您正在生產(chǎn)中運(yùn)行,則會自動禁用DevTools。
部署時有兩種模式:fully packaged artifact完全打包和exploded artifact ;采取前者打包方式Spring會認(rèn)為是生產(chǎn)應(yīng)用;后者認(rèn)為是開發(fā)模式,在Idea等IDE中采取的是后者。
Live Reload
LiveReload 是一個有用的工具,它允許您在文件中進(jìn)行更改時立即在瀏覽器中更新頁面,如HTML,CSS,圖像等。它甚至可以根據(jù)需要預(yù)處理文件 - 這意味著自動編譯SASS或LESS文件。
Spring DevTools自動啟動LiveReload服務(wù)器的本地實(shí)例,該服務(wù)器監(jiān)視您的文件。您需要做的就是安裝一個 瀏覽器擴(kuò)展 ,然后你就可以了。它不僅可用于開發(fā)應(yīng)用程序的前端(如果將其作為Spring應(yīng)用程序工件的一部分進(jìn)行分發(fā)),還可用于監(jiān)視和重新加載REST API的輸出。
屬性覆蓋
在本地開發(fā)應(yīng)用程序時,與在生產(chǎn)環(huán)境相比通常需要不同的配置。自己管理多組配置是不必要的復(fù)雜。好消息是Spring Boot DevTools為您的本地開發(fā)配置了許多開箱即用的屬性。
spring.thymeleaf.cache=false spring.freemarker.cache=false spring.groovy.template.cache=false spring.mustache.cache=false server.servlet.session.persistent=true spring.h2.console.enabled=true spring.resources.cache.period=0 spring.resources.chain.cache=false spring.template.provider.cache=false spring.mvc.log-resolved-exception=true server.servlet.jsp.init-parameters.development=true spring.reactor.stacktrace-mode.enabled=true
可以檢查 DevToolsPropertyDefaultsPostProcessor 中所有屬性的 列表 。
遠(yuǎn)程連接
除本地開發(fā)外,您還可以連接到運(yùn)行DevTools的遠(yuǎn)程應(yīng)用程序。這不適用于生產(chǎn)環(huán)境,因?yàn)樗赡苁且粋€嚴(yán)重的安全風(fēng)險。但是,它在預(yù)生產(chǎn)環(huán)境中非常有用。
默認(rèn)情況下不啟用遠(yuǎn)程連接。您需要通過修改pom文件顯式啟用它:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludeDevtools>false</excludeDevtools> </configuration> </plugin> </plugins> </build>
然后,您需要設(shè)置一個密碼,以便在連接到遠(yuǎn)程應(yīng)用程序時用于身份驗(yàn)證:
spring.devtools.remote.secret=somesecret
遠(yuǎn)程應(yīng)用程序運(yùn)行后,您可以啟動遠(yuǎn)程連接會話,現(xiàn)在,您需要啟動org.springframework.boot.devtools.RemoteSpringApplication,使用遠(yuǎn)程應(yīng)用程序的URL作為參數(shù)啟動。請注意,https如果可能,請使用https。
在IDE中輕松運(yùn)行遠(yuǎn)程連接。在IDEA中,您只需創(chuàng)建一個新的運(yùn)行配置。轉(zhuǎn)到Run → Edit Configurations...并創(chuàng)建一個+左上角帶有圖標(biāo)的新配置。選擇Application類型。
從DevTools模塊中選擇RemoteSpringApplication作為Main類,并設(shè)置遠(yuǎn)程參數(shù)遠(yuǎn)程應(yīng)用程序的URL。
運(yùn)行此配置后,如果與遠(yuǎn)程應(yīng)用程序的連接成功,您應(yīng)該會看到相應(yīng)的輸出。
連接到遠(yuǎn)程應(yīng)用程序后,DevTools監(jiān)視類路徑更改,與本地開發(fā)相同。但是,它不是本地重新啟動,而是將更改推送到遠(yuǎn)程服務(wù)器并在那里觸發(fā)重新啟動。這比構(gòu)建應(yīng)用程序和部署到遠(yuǎn)程計(jì)算機(jī)要快得多。
全局配置
可以像使用任何其他Spring應(yīng)用程序一樣使用配置屬性配置DevTools。這通常意味著編輯application.properties您的項(xiàng)目。此配置對于每個應(yīng)用程序是獨(dú)立的。
但是,在某些情況下,為同一臺計(jì)算機(jī)上運(yùn)行的所有應(yīng)用程序進(jìn)行全局配置可能很方便。您可以創(chuàng)建一個名為.spring-boot-devtools.properties位于$HOME目錄中的屬性文件。此文件中聲明的配置將應(yīng)用于運(yùn)行DevTools的所有應(yīng)用程序。
限制
使用DevTools的Spring應(yīng)用程序會自動啟動LiveReload服務(wù)器。不幸的是,此服務(wù)器中只有一個實(shí)例可以同時運(yùn)行。更確切地說,只有第一個可行。這不僅適用于使用DevTools的Spring應(yīng)用程序的多個實(shí)例,也適用于任何其他應(yīng)用程序,這些應(yīng)用程序也在后臺使用LiverReload,例如 Gatsby 在開發(fā)模式下。
如果要將Spring應(yīng)用程序配置為不啟動LiveReload服務(wù)器,可以在application.properties加入:
spring.devtools.livereload.enabled=false
關(guān)機(jī)鉤ShutdownHook
DevTools依賴于 關(guān)機(jī)掛鉤 的SpringApplication。如果您使用以下方法手動禁用掛鉤,它將無法正常工作:
springApplication.setRegisterShutdownHook(false);
認(rèn)情況下,掛鉤已啟用,因此除非您明確禁用它,否則無需擔(dān)心它。
與第三方庫的沖突
DevTools通常應(yīng)該正常運(yùn)行,但它可能與第三方庫有沖突。特別是, 已知問題 是使用標(biāo)準(zhǔn)ObjectInputStream進(jìn)行反序列化存在存在沖突。如果發(fā)生此類沖突,您可以通過設(shè)置禁用自動重啟:
spring.devtools.restart.enabled=false
將不再觸發(fā)重啟。但是,仍將使用重新啟動類加載器。如果您需要完全禁用類加載器,則需要在啟動應(yīng)用程序之前執(zhí)行此操作:
public static void main(String args) { System.setProperty("spring.devtools.restart.enabled", "false"); SpringApplication.run(MyApp.class, args); }
即使您不使用自動重啟,您仍然可以從DevTools提供的其他功能中受益。
總結(jié)
以上所述是小編給大家介紹的Spring Boot DevTools使用教程,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
java數(shù)據(jù)結(jié)構(gòu)基礎(chǔ):算法
這篇文章主要介紹了Java的數(shù)據(jù)解構(gòu)基礎(chǔ),希望對廣大的程序愛好者有所幫助,同時祝大家有一個好成績,需要的朋友可以參考下,希望能給你帶來幫助2021-07-07Java使用quartz實(shí)現(xiàn)定時任務(wù)示例詳解
這篇文章主要為大家介紹了Java使用quartz實(shí)現(xiàn)定時任務(wù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08SpringBoot中關(guān)于static和templates的注意事項(xiàng)以及webjars的配置
今天小編就為大家分享一篇關(guān)于SpringBoot中關(guān)于static和templates的注意事項(xiàng)以及webjars的配置,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-01-01解決springboot錯誤:找不到或無法加載主類(配置編碼或者M(jìn)aven)
這篇文章主要介紹了解決springboot錯誤:找不到或無法加載主類(配置編碼或者M(jìn)aven)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06Springboot內(nèi)置tomcat配置虛擬路徑過程解析
這篇文章主要介紹了Springboot內(nèi)置tomcat配置虛擬路徑過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-04-04