Spring Boot DevTools 热部署

发布于:2025-06-03 ⋅ 阅读:(35) ⋅ 点赞:(0)

在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 插件。
  • 如何生效
    1. 在项目的 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>
      
    2. 确保IDE配置为在保存文件时自动编译项目(大多数现代IDE默认如此)。
    3. 启动应用程序。
    4. 之后,当你修改并保存Java代码或资源文件时:
      • 对于Java代码更改:IDE编译后,devtools 会自动重启应用。你可以在控制台看到重启的日志。
      • 对于静态资源或模板更改:如果配置了LiveReload,浏览器会自动刷新。
  • 无需手动重启devtools 的设计初衷就是为了避免频繁的手动重启。如果添加了依赖后仍然需要手动重启才能看到更改,可能是IDE的编译设置问题,或者某些特定类型的更改可能不会触发自动重启(尽管这种情况较少见)。
  • 生产环境禁用:当应用程序打包成可执行的 JAR 或 WAR 文件并以 java -jar 方式运行时,devtools 会自动禁用,不会对生产环境造成影响。这是通过检查是否使用了特殊的 “restart ClassLoader” 来判断的。
  • 自定义重启排除:可以通过 spring.devtools.restart.exclude 属性配置某些路径下的文件更改不触发自动重启。

总结:spring-boot-devtools 的核心价值在于其自动特性,引入依赖并正确配置IDE后,它会在代码或资源更改时自动处理应用的更新,从而避免了手动重启的繁琐。


网站公告

今日签到

点亮在社区的每一天
去签到