在Spring Boot項目中加入 spring-boot-devtools
熱部署依賴啟動器后,通常不需要手動重啟項目即可讓更改生效。spring-boot-devtools
的核心特性之一就是自動重啟或熱加載。
Spring Boot DevTools 熱部署關鍵知識點 🔥
- 目的:
spring-boot-devtools
模塊旨在提升開發階段的效率。它提供了諸如自動重啟、LiveReload、屬性默認值優化等功能。 - 自動重啟 (Automatic Restart):
- 當
devtools
檢測到類路徑上的文件發生變化(例如,.class
文件被重新編譯)時,它會自動重啟應用程序。 - 這種重啟通常比手動停止和啟動要快得多,因為它使用了一個特殊的類加載器,只重新加載應用程序的類,而不會重新加載第三方庫的類。
- 觸發條件:在IDE中修改并保存Java代碼,IDE自動編譯后,
devtools
會檢測到變化并觸發重啟。
- 當
- LiveReload (實時重新加載):
devtools
內嵌了一個 LiveReload 服務器。當資源文件(如HTML、CSS、JavaScript、Thymeleaf模板等)發生變化時,它可以觸發瀏覽器自動刷新。- 需要瀏覽器安裝 LiveReload 插件。
- 如何生效:
- 在項目的
pom.xml
(Maven) 或build.gradle
(Gradle) 文件中添加spring-boot-devtools
依賴。<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional> </dependency>
- 確保IDE配置為在保存文件時自動編譯項目(大多數現代IDE默認如此)。
- 啟動應用程序。
- 之后,當你修改并保存Java代碼或資源文件時:
- 對于Java代碼更改:IDE編譯后,
devtools
會自動重啟應用。你可以在控制臺看到重啟的日志。 - 對于靜態資源或模板更改:如果配置了LiveReload,瀏覽器會自動刷新。
- 對于Java代碼更改:IDE編譯后,
- 在項目的
- 無需手動重啟:
devtools
的設計初衷就是為了避免頻繁的手動重啟。如果添加了依賴后仍然需要手動重啟才能看到更改,可能是IDE的編譯設置問題,或者某些特定類型的更改可能不會觸發自動重啟(盡管這種情況較少見)。 - 生產環境禁用:當應用程序打包成可執行的 JAR 或 WAR 文件并以
java -jar
方式運行時,devtools
會自動禁用,不會對生產環境造成影響。這是通過檢查是否使用了特殊的 “restart ClassLoader” 來判斷的。 - 自定義重啟排除:可以通過
spring.devtools.restart.exclude
屬性配置某些路徑下的文件更改不觸發自動重啟。
總結:spring-boot-devtools
的核心價值在于其自動特性,引入依賴并正確配置IDE后,它會在代碼或資源更改時自動處理應用的更新,從而避免了手動重啟的繁瑣。