VSCode中Spring Boot热部署需同时满足三个条件:DevTools依赖正确引入(runtime scope且optional=true)、java.autobuild.enabled开启、application.properties中显式配置spring.devtools.restart.enabled=true。

VSCode 本身不内置 Java 热部署能力,必须靠 spring-boot-devtools + VSCode 的自动编译机制协同工作;单纯装个“热加载插件”没用,Deploy 插件只适用于传统 WAR 部署到 Tomcat 场景,对 Spring Boot 内嵌容器无效。
确认你用的是 Spring Boot 项目(不是普通 Maven Web)
这是最关键的前置判断。如果你的项目是 spring-boot-starter-web 启动、通过 SpringApplication.run() 启动的,那走 DevTools 路线;如果是 maven-archetype-webapp + 手动丢 Tomcat 的 WAR 包,那得换 Deploy 插件 + Tomcat 配置。
- 检查
pom.xml是否含spring-boot-starter-parent或spring-boot-maven-plugin - 主类是否带
@SpringBootApplication注解 - 启动方式是否为直接运行主类(而非打包后部署)
添加 spring-boot-devtools 并验证是否生效
DevTools 是唯一被 Spring 官方支持的热重启方案,它监听 src/main/java 和 src/main/resources 下的变更,触发上下文重启。注意:它不会热替换字节码(像 JRebel 那样),而是快速重启整个 ApplicationContext。
- 在
pom.xml的<dependencies></dependencies>中加入:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency>
- 保存后等待 Maven 自动导入,或手动执行
mvn compile - 启动应用后,修改任意一个
@RestController的返回值,保存文件 - 观察控制台是否输出类似
Restarting due to change in ...—— 没这行就说明没生效
VSCode 必须开启 java.autobuild.enabled
很多人卡在这步:DevTools 已加,但改完代码不重启。根本原因是 VSCode 默认不自动编译 Java 文件,.class 文件没更新,DevTools 就无从检测变化。
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
立即学习“Java免费学习笔记(深入)”;
- 打开设置(
Ctrl + ,),搜索java.autobuild.enabled,确保勾选 - 同时开启
File → Auto Save(建议选afterDelay,避免光标移动就触发) - 不要关掉
java.configuration.updateBuildConfiguration,保持为automatic,否则 pom 变更后不会重载依赖 - 如果用了 JDK 21+,确认
java.home指向的是完整 JDK(不是 JRE),且版本与项目兼容(如 Spring Boot 3.x 要求 JDK 17+)
常见失效原因和绕过陷阱
热部署看似简单,实际失败率高,多数问题出在路径、作用域或缓存上。
-
src/main/resources下的application.yml修改会触发重启,但templates/下的 Thymeleaf 文件默认不触发 —— 需加配置:spring.thymeleaf.cache: false - DevTools 默认忽略
static/**、public/**外部资源变动,如要让 CSS/JS 修改也刷新浏览器,需配合 LiveReload 浏览器插件或启用spring.devtools.livereload.enabled: true - 如果改了实体类字段或
@Entity结构,DevTools 会重启,但 Hibernate 的二级缓存或数据库 Schema 不会自动同步 —— 这类结构性变更仍需手动重启或清缓存 - 别在
src/test或target/下改文件,DevTools 根本不监控这些目录
真正起效的热部署,核心就三件事:DevTools 在 classpath、VSCode 编译出新 .class、文件保存动作真实发生。其余都是优化项,别一上来就折腾 LiveReload 或自定义 restart.exclude,先让基础链路跑通。


















