源本科技 | 码上会

Spring Boot DevTools

2026/03/27
29
0

引言

Spring Boot DevTools 是一个专为提升开发效率而设计的模块,它通过提供一系列开发时工具,让你能更专注于代码本身,而不是反复重启应用或调整配置。

如何引入

DevTools 是可选的,并且只在开发阶段生效,打包成生产环境的 JAR 包时会自动被排除。

pom.xml 中添加以下依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
</dependencies>
  • <optional>true</optional>:表示这个依赖不会被传递到其他模块,避免污染项目依赖。

工作原理

DevTools 的核心目标是实现“快速反馈循环”,让你修改代码后能立即看到效果。

自动重启

这是 DevTools 最受欢迎的功能。当你修改了 Java 类、配置文件(如 application.properties)后,应用会自动重启,无需手动停止再启动。

  • 工作原理:它通过两个类加载器(ClassLoader)实现。

    • 基础类加载器 (Base ClassLoader):加载第三方库等不会变化的类。

    • 重启类加载器 (Restart ClassLoader):加载你的业务代码。

  • 优势:当检测到代码变更时,DevTools 只会丢弃并重新创建“重启类加载器”,而保留“基础类加载器”和 JVM 进程。这比完全重启应用要快得多。

浏览器自动刷新

DevTools 内置了一个 LiveReload 服务器。当你的静态资源(如 CSS、JavaScript)或模板文件(如 Thymeleaf)发生变化时,它会自动通知浏览器刷新页面。

  • 使用方法:需要在浏览器上安装对应的 LiveReload 插件(Chrome、Firefox 等主流浏览器均支持)。

  • 默认端口:LiveReload 服务器默认监听 35729 端口。

开发环境默认配置

DevTools 会自动为你调整一些不利于开发的默认设置,让你无需手动配置。

  • 禁用模板缓存:自动关闭 Thymeleaf、FreeMarker 等模板引擎的缓存,确保你修改的页面能立即生效。

  • 开启调试日志:自动开启 Web 相关的 DEBUG 级别日志,方便你查看请求处理过程。

常见配置与问题

常用配置

你可以通过配置文件来微调 DevTools 的行为。

# 启用/禁用自动重启
spring.devtools.restart.enabled=true

# 排除特定路径,修改这些路径下的文件不会触发重启
spring.devtools.restart.exclude=static/**,public/**

# 添加额外的监控路径
spring.devtools.restart.additional-paths=src/main/resources/templates

# 启用/禁用 LiveReload
spring.devtools.livereload.enabled=true

自动重启不生效

最常见的原因是 IDE 没有开启自动编译。DevTools 依赖编译后的 .class 文件变化来触发重启。

  • IntelliJ IDEA 配置

    1. 打开设置:FileSettingsBuild, Execution, DeploymentCompiler

    2. 勾选 Build project automatically

    3. 按下 Ctrl + Shift + Alt + / (Windows) 或 Cmd + Shift + Option + / (macOS) 打开注册表,找到并勾选 compiler.automake.allow.when.app.running

完成以上配置后,当你保存并编译代码时,DevTools 就会自动检测到变化并重启应用了。