Spring Boot 熱部署詳解
1. 熱部署簡介
熱部署(Hot Deployment)允許在應用運行時修改代碼或配置文件,無需重啟應用即可使更改生效。Spring Boot 通過 spring-boot-devtools
模塊實現這一功能,其核心依賴于 LiveReload 技術和自動重啟機制。
2. 啟用熱部署的步驟
-
添加依賴
在pom.xml
中引入spring-boot-devtools
,并設置<optional>true</optional>
避免傳遞依賴:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional> </dependency>
-
重啟應用
首次啟用需重啟應用,之后修改代碼或資源文件時,應用會自動檢測并重啟。 -
驗證配置
查看日志確認LiveReload
服務器啟動:o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729
3. 熱部署核心原理
- LiveReload:通過 WebSocket 監聽文件變化,通知瀏覽器或客戶端刷新。
- 自動重啟:監控類路徑(classpath)的文件變化,觸發應用重啟。
4. 配置項詳解
以下是 spring-boot-devtools
的關鍵配置項,通過 application.properties
或 application.yml
配置:
配置項 | 默認值 | 說明 |
---|---|---|
spring.devtools.livereload.enabled | true | 啟用/禁用 LiveReload 服務器。 |
spring.devtools.livereload.port | 35729 | LiveReload 服務器端口。 |
spring.devtools.restart.additional-exclude | 空字符串 | 在默認排除路徑基礎上,新增不觸發重啟的文件夾(如 src/main/resources )。 |
spring.devtools.restart.additional-paths | 空字符串 | 在默認監控路徑基礎上,新增需觸發重啟的文件夾(如 src/main/java )。 |
spring.devtools.restart.enabled | true | 啟用/禁用自動重啟功能。 |
spring.devtools.restart.exclude | META-INF/maven/**,<br>**/src/main/resources/**,<br>**/src/main/static/**,<br>**/src/main/public/**,<br>**/src/main/templates/**,<br>**/*Test.class,<br>**/*Tests.class,<br>git.properties | 默認排除路徑(修改這些路徑的文件不會觸發重啟)。 |
spring.devtools.restart.poll-interval | 1000ms | 檢測文件變化的時間間隔(單位:毫秒)。 |
spring.devtools.restart.quiet-period | 400ms | 在無變化時,觸發重啟前的靜默期(避免頻繁重啟)。 |
spring.devtools.restart.trigger-file | 空字符串 | 指定一個文件,修改該文件時觸發重啟(如 trigger.txt )。 |
5. 配置項使用示例
# 禁用 LiveReload
spring.devtools.livereload.enabled=false# 自定義 LiveReload 端口
spring.devtools.livereload.port=35730# 新增排除路徑(如日志文件)
spring.devtools.restart.additional-exclude=logs/**# 新增監控路徑(如自定義配置目錄)
spring.devtools.restart.additional-paths=config/# 設置觸發文件
spring.devtools.restart.trigger-file=reload.txt
6. 注意事項
- 排除路徑:默認排除靜態資源(如
src/main/resources
、public
)和測試類,修改這些文件不會觸發重啟。 - IDE 配置:需確保 IDE(如 IntelliJ、Eclipse)支持自動編譯,否則修改代碼后需手動保存。
- 遠程調試:若通過遠程調試啟動應用,需添加參數
-noverify
以提升重啟速度:java -noverify -jar your-app.jar
7. 完整配置項表格總結
配置項 | 默認值 | 說明 |
---|---|---|
spring.devtools.livereload.enabled | true | 是否啟用 LiveReload 服務器。 |
spring.devtools.livereload.port | 35729 | LiveReload 服務器端口。 |
spring.devtools.restart.additional-exclude | 空字符串 | 新增不觸發重啟的路徑。 |
spring.devtools.restart.additional-paths | 空字符串 | 新增需觸發重啟的路徑。 |
spring.devtools.restart.enabled | true | 是否啟用自動重啟。 |
spring.devtools.restart.exclude | 默認路徑(見上文) | 默認排除路徑,修改這些路徑的文件不會觸發重啟。 |
spring.devtools.restart.poll-interval | 1000ms | 文件變化檢測間隔。 |
spring.devtools.restart.quiet-period | 400ms | 觸發重啟前的靜默期。 |
spring.devtools.restart.trigger-file | 空字符串 | 指定觸發重啟的文件。 |
8. 常見問題
- Q:修改代碼后應用未重啟?
A:檢查是否保存文件,IDE 是否自動編譯,或排除路徑是否包含修改的文件。 - Q:LiveReload 未生效?
A:確保瀏覽器插件(如 LiveReload 插件)已安裝并啟用,且端口未被占用。 - Q:如何禁用特定模塊的熱部署?
A:在exclude
中添加路徑,或通過additional-exclude
擴展排除列表。
通過以上配置和步驟,可靈活控制 Spring Boot 應用的熱部署行為,提升開發效率。