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 应用的热部署行为,提升开发效率。