SpringBoot3使用devtools實(shí)現(xiàn)代碼熱部署的詳細(xì)步驟
一、Spring Boot DevTools 簡(jiǎn)介
Spring Boot DevTools是一組用于提高開發(fā)人員生產(chǎn)力,并加速Spring Boot應(yīng)用程序開發(fā)的工具。它提供了一些功能,可以幫助開發(fā)人員更快速地構(gòu)建應(yīng)用程序,并減少常見(jiàn)的開發(fā)問(wèn)題。
Spring Boot DevTools的主要作用包括:
- 自動(dòng)重新加載:當(dāng)應(yīng)用程序中的代碼發(fā)生變化時(shí),DevTools會(huì)自動(dòng)重新加載應(yīng)用程序,而無(wú)需手動(dòng)重新啟動(dòng)服務(wù)器。這可以節(jié)省大量時(shí)間,尤其是在開發(fā)過(guò)程中進(jìn)行代碼調(diào)試和迭代時(shí)。
- 實(shí)時(shí)監(jiān)控:DevTools提供了實(shí)時(shí)的應(yīng)用程序監(jiān)控功能,可以顯示應(yīng)用程序的運(yùn)行狀態(tài)、內(nèi)存使用情況、線程狀態(tài)等信息。這有助于開發(fā)人員快速了解應(yīng)用程序的狀態(tài)和性能,并及時(shí)發(fā)現(xiàn)和解決問(wèn)題。
- 自動(dòng)配置:DevTools可以根據(jù)開發(fā)環(huán)境自動(dòng)配置應(yīng)用程序,如啟用H2數(shù)據(jù)庫(kù)控制臺(tái)、禁用安全等。這可以減少開發(fā)人員手動(dòng)配置應(yīng)用程序的需求,并加快開發(fā)過(guò)程。
- 日志管理:DevTools提供了一個(gè)集中的日志管理功能,可以顯示應(yīng)用程序的日志信息,并在出現(xiàn)問(wèn)題時(shí)提供更詳細(xì)的錯(cuò)誤堆棧跟蹤。這有助于開發(fā)人員快速定位和解決問(wèn)題。
二、使用步驟
- 創(chuàng)建一個(gè)新的Spring Boot項(xiàng)目,可以使用Spring Initializr或Maven/Gradle等構(gòu)建工具。
- 在項(xiàng)目的pom.xml文件中,添加Spring Boot DevTools的依賴項(xiàng):
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency>
- 保存并關(guān)閉pom.xml文件。
- 在IDE中導(dǎo)入項(xiàng)目,并啟動(dòng)應(yīng)用程序。
- 在應(yīng)用程序運(yùn)行時(shí),DevTools將自動(dòng)啟用。
現(xiàn)在,當(dāng)您在應(yīng)用程序的代碼中進(jìn)行更改時(shí),DevTools將自動(dòng)重新加載應(yīng)用程序,而無(wú)需手動(dòng)重新啟動(dòng)服務(wù)器。您還可以使用DevTools提供的實(shí)時(shí)監(jiān)控和日志管理功能來(lái)監(jiān)視應(yīng)用程序的狀態(tài)和性能,并快速定位和解決問(wèn)題。
三、實(shí)時(shí)監(jiān)控
Spring Boot DevTools 提供了實(shí)時(shí)監(jiān)控功能,這對(duì)于開發(fā)和調(diào)試應(yīng)用程序來(lái)說(shuō)非常有用。下面我將介紹如何使用 DevTools 的實(shí)時(shí)監(jiān)控功能。
1、使用 DevTools 的實(shí)時(shí)監(jiān)控功能
DevTools 的一個(gè)重要特性是自動(dòng)重啟。當(dāng)你對(duì)代碼做出更改并保存時(shí),應(yīng)用會(huì)自動(dòng)重啟,這使得改動(dòng)能夠快速生效。
以下是一個(gè)示例流程:
啟動(dòng)應(yīng)用程序: 使用 IDE 或命令行啟動(dòng)你的 Spring Boot 應(yīng)用。
修改代碼: 當(dāng)應(yīng)用運(yùn)行時(shí),嘗試更改一些代碼。例如,修改一個(gè)控制器的返回值。
自動(dòng)重啟: 保存更改后,DevTools 將檢測(cè)到這些更改并自動(dòng)重新啟動(dòng)應(yīng)用程序。這意味著你無(wú)需手動(dòng)停止和重新啟動(dòng)服務(wù)器。
查看更改: 在瀏覽器或測(cè)試工具中重新請(qǐng)求你更改的端點(diǎn),你應(yīng)該能看到新的更改已經(jīng)生效。
2、監(jiān)控靜態(tài)資源和視圖模板
DevTools 不僅可以監(jiān)控 Java 文件的更改,還可以監(jiān)控靜態(tài)資源(如 HTML、CSS、JavaScript 文件)和視圖模板的更改。對(duì)這些資源的更改通常無(wú)需重啟應(yīng)用程序,DevTools 會(huì)自動(dòng)應(yīng)用這些更改。
3、其他實(shí)時(shí)監(jiān)控功能
除了自動(dòng)重啟,DevTools 還提供了其他實(shí)用的實(shí)時(shí)監(jiān)控功能,如:
- 實(shí)時(shí)應(yīng)用屬性重載: 在
application.properties
或application.yml
文件中做出的更改可以在不重啟應(yīng)用的情況下自動(dòng)生效。 - 遠(yuǎn)程應(yīng)用監(jiān)控: DevTools 可以配置用于遠(yuǎn)程應(yīng)用,允許你監(jiān)控和調(diào)試部署在不同環(huán)境中的應(yīng)用程序。
4、注意事項(xiàng)
- 性能影響: DevTools 主要用于開發(fā)環(huán)境,因?yàn)樗赡軙?huì)影響應(yīng)用程序的性能。
- 安全性: 確保不要在生產(chǎn)環(huán)境中部署 DevTools,因?yàn)樗赡艽蜷_一些不安全的端點(diǎn)。
通過(guò)使用 Spring Boot DevTools,你可以顯著提高開發(fā)效率,實(shí)現(xiàn)快速迭代和測(cè)試。這些實(shí)時(shí)監(jiān)控功能為開發(fā)人員提供了即時(shí)反饋,有助于快速發(fā)現(xiàn)并修復(fù)問(wèn)題,同時(shí)也使得實(shí)驗(yàn)新想法變得更加容易。
四、默認(rèn)屬性配置
Spring Boot 支持的幾個(gè)庫(kù)使用緩存來(lái)提高性能。例如,模板引擎緩存編譯后的模板,以避免重復(fù)解析模板文件。此外,Spring MVC 在提供靜態(tài)資源時(shí),可以在響應(yīng)中添加 HTTP 緩存頭。
雖然緩存對(duì)生產(chǎn)非常有益,但在開發(fā)過(guò)程中可能會(huì)適得其反,導(dǎo)致您無(wú)法看到剛剛在應(yīng)用程序中做出的更改。因此,spring-boot-tools 默認(rèn)禁用緩存選項(xiàng)。
緩存選項(xiàng)通常通過(guò) application.properties 文件中的設(shè)置進(jìn)行配置。例如,Thymeleaf 提供了 spring.phrine.cache 屬性。spring-boot-tools 模塊會(huì)自動(dòng)應(yīng)用合理的開發(fā)時(shí)配置,而不需要手動(dòng)設(shè)置這些屬性。
下表列出了應(yīng)用的所有屬性:
名稱 | 默認(rèn)值 |
---|---|
server.error.include-binding-errors | always |
server.error.include-message | always |
server.error.include-stacktrace | always |
server.servlet.jsp.init-parameters.development | true |
server.servlet.session.persistent | true |
spring.docker.compose.readiness.wait | only-if-started |
spring.freemarker.cache | false |
spring.graphql.graphiql.enabled | true |
spring.groovy.template.cache | false |
spring.h2.console.enabled | true |
spring.mustache.servlet.cache | false |
spring.mvc.log-resolved-exception | true |
spring.reactor.netty.shutdown-quiet-period | 0s |
spring.template.provider.cache | false |
spring.thymeleaf.cache | false |
spring.web.resources.cache.period | 0 |
spring.web.resources.chain.cache | false |
注意:如果你不希望應(yīng)用屬性默認(rèn)值,可以在 application.properties 中將 spring.devtools.add-properties 設(shè)置為 false。
因?yàn)樵陂_發(fā) Spring MVC 和 Spring WebFlux 應(yīng)用程序時(shí)需要更多關(guān)于 Web 請(qǐng)求的信息,開發(fā)人員工具建議您為 Web 日志組啟用DEBUG日志記錄。這將為您提供有關(guān)傳入請(qǐng)求、處理它的處理程序、響應(yīng)結(jié)果和其他詳細(xì)信息的信息。如果您希望記錄所有請(qǐng)求詳細(xì)信息(包括潛在的敏感信息),您可以打開 spring.mvc.log-request-details 或 spring.codec.log-request-details 配置屬性。
五、LiveReload
spring-boot-tools模塊包含一個(gè)嵌入式LiveReload服務(wù)器,可以在資源更改時(shí)觸發(fā)瀏覽器刷新。LiveReload瀏覽器擴(kuò)展程序可免費(fèi)用于Chrome、Firefox和Safari。您可以在所選瀏覽器的市場(chǎng)或商店中搜索“LiveReload”來(lái)找到這些擴(kuò)展程序。
如果你不想在應(yīng)用程序運(yùn)行時(shí)啟動(dòng)LiveReload服務(wù)器,你可以將spring.tools.livereload.enabled屬性設(shè)置為false。
注:一次只能運(yùn)行一個(gè) LiveReload 服務(wù)器。在啟動(dòng)應(yīng)用程序之前,請(qǐng)確保沒(méi)有其他 LiveReload 服務(wù)器正在運(yùn)行。如果從IDE啟動(dòng)多個(gè)應(yīng)用程序,則只有第一個(gè)應(yīng)用程序具有 LiveReload 支持。
六、全局設(shè)置
你可以通過(guò)這個(gè)目錄下的文件 $HOME/.config/spring-boot 修改 devtools的全局配置
- spring-boot-devtools.properties
- spring-boot-devtools.yaml
- spring-boot-devtools.yml
添加到這些文件的任何屬性都適用于您機(jī)器上使用 devtools 的所有 Spring Boot 應(yīng)用程序
默認(rèn)情況下,$HOME
是用戶的主目錄。要自定義此位置,請(qǐng)?jiān)O(shè)置 SPRING_DEVTOOLS_HOME
環(huán)境變量或 spring.tools.home
系統(tǒng)屬性。
如果在 $HOME/.config/spring-boot 中找不到 devtools 配置文件,則會(huì)搜索 $HOME 目錄的根目錄是否存在 .spring-boot-devtools.properties 文件。這允許您與不支持 $HOME/.config/spring-boot 位置的舊版本 Spring Boot 上的應(yīng)用程序共享 devtools 全局配置。
DevTools properties/yaml 文件中不支持 Profiles 配置。
七、遠(yuǎn)程應(yīng)用程序
Spring Boot DevTools不限于本地開發(fā)。您還可以在遠(yuǎn)程運(yùn)行應(yīng)用程序時(shí)使用多種功能。
遠(yuǎn)程支持是可選的,因?yàn)閱⒂盟赡軙?huì)帶來(lái)安全風(fēng)險(xiǎn)。它只應(yīng)在受信任的網(wǎng)絡(luò)上運(yùn)行或使用 SSL 進(jìn)行保護(hù)時(shí)啟用。如果這兩種選項(xiàng)都不可用,則不應(yīng)使用 DevTools 的遠(yuǎn)程支持。您永遠(yuǎn)不應(yīng)該在生產(chǎn)部署中啟用支持。
要啟用它,您需要確保 DevTools 包含在重新打包的存檔中,如下所示:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludeDevtools>false</excludeDevtools> </configuration> </plugin> </plugins> </build>
然后,您需要設(shè)置 spring.devtools.remote.secret 屬性。與任何重要的密碼或秘密一樣,該值應(yīng)該是唯一且強(qiáng)壯的,這樣它就不能被猜測(cè)或暴力破解。
遠(yuǎn)程開發(fā)工具支持分為兩部分:接受連接的服務(wù)器端端點(diǎn)和在 IDE 中運(yùn)行的客戶端應(yīng)用程序。設(shè)置 spring.devtools.remote.secret 屬性時(shí),服務(wù)器組件會(huì)自動(dòng)啟用??蛻舳私M件必須手動(dòng)啟動(dòng)。
Spring WebFlux應(yīng)用程序不支持遠(yuǎn)程工具。
參考
以上就是SpringBoot3使用devtools實(shí)現(xiàn)代碼熱部署的詳細(xì)步驟的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot3 devtools代碼熱部署的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- SpringBoot+devtools實(shí)現(xiàn)熱部署的示例代碼
- SpringBoot使用DevTools實(shí)現(xiàn)后端熱部署的過(guò)程詳解
- springBoot 插件工具熱部署 Devtools的步驟詳解
- 一篇文章帶你搞定SpringBoot中的熱部署devtools方法
- SpringBoot2.X Devtools熱部署實(shí)現(xiàn)解析
- Springboot項(xiàng)目基于Devtools實(shí)現(xiàn)熱部署步驟詳解
- SpringBoot實(shí)現(xiàn)devtools實(shí)現(xiàn)熱部署過(guò)程解析
- Springboot+devtools配置熱部署過(guò)程
相關(guān)文章
Java阻塞隊(duì)列BlockingQueue基礎(chǔ)與使用
本文詳細(xì)介紹了BlockingQueue家庭中的所有成員,包括他們各自的功能以及常見(jiàn)使用場(chǎng)景,通過(guò)實(shí)例代碼介紹了Java 阻塞隊(duì)列BlockingQueue的相關(guān)知識(shí),需要的朋友可以參考下2023-01-01java實(shí)現(xiàn)簡(jiǎn)單猜拳小游戲
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單猜拳小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11一文詳細(xì)springboot實(shí)現(xiàn)MySQL數(shù)據(jù)庫(kù)的整合步驟
Spring Boot可以很方便地與MySQL數(shù)據(jù)庫(kù)進(jìn)行整合,下面這篇文章主要給大家介紹了關(guān)于springboot實(shí)現(xiàn)MySQL數(shù)據(jù)庫(kù)的整合步驟,文中通過(guò)圖文以及代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-03-03Java實(shí)現(xiàn)數(shù)據(jù)脫敏(Desensitization)的操作指南
數(shù)據(jù)脫敏是指通過(guò)對(duì)敏感數(shù)據(jù)進(jìn)行部分或完全隱藏處理,保護(hù)敏感信息在存儲(chǔ)和使用過(guò)程中的安全性,常見(jiàn)的應(yīng)用場(chǎng)景包括日志記錄、接口返回、報(bào)表展示、數(shù)據(jù)分析等,本文給大家介紹了Java實(shí)現(xiàn)數(shù)據(jù)脫敏(Desensitization)的操作指南,需要的朋友可以參考下2025-02-02springboot+redis過(guò)期事件監(jiān)聽實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了springboot+redis過(guò)期事件監(jiān)聽實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03