Spring Boot DevTools 热部署
在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后,它会在代码或资源更改时自动处理应用的更新,从而避免了手动重启的繁琐。