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

VSCode 里 Spring Boot 热部署能用,但默认不生效——必须同时满足三个条件:DevTools 依赖已加载、java.autobuild.enabled 开启、spring.devtools.restart.enabled=true 显式配置,缺一不可。
确保 DevTools 依赖正确引入并处于 runtime 作用域
很多人只复制了依赖却没注意 scope 和 optional,导致 DevTools 在运行时被 Maven 排除。Maven 项目必须在 pom.xml 中写成:
<dependency><groupid>org.springframework.boot</groupid><artifactid>spring-boot-devtools</artifactid><scope>runtime</scope><optional>true</optional></dependency>
Gradle 用户对应写法是:
developmentOnly 'org.springframework.boot:spring-boot-devtools'
-
scope=runtime确保它不会打包进最终 jar,只在开发期起作用 -
optional=true防止子模块意外继承该依赖,引发冲突 - 如果用了 Lombok,别把
lombok和devtools放在同一<dependency></dependency>块里——XML 解析会失败
开启 VSCode 的 Java 自动编译和文件自动保存
DevTools 只监听 target/classes(Maven)或 build/classes(Gradle)目录变化,而 VSCode 默认不自动编译 Java 文件。必须手动打开两个开关:
- 设置中搜索
java.autobuild.enabled,勾选启用 - 设置中搜索
files.autoSave,设为onFocusChange或afterDelay(不推荐off) - 检查项目根目录下是否有
.vscode/settings.json,里面不能有"java.compile.nullAnalysis.mode": "off"这类覆盖性配置,否则可能抑制编译
验证方式:改一个 @RestController 方法体,保存后看 target/classes/xxx/YourController.class 时间戳是否更新。不更新 = 编译没触发 = 热部署永远不启动。
application.properties 必须显式启用 restart 且排除路径要谨慎
虽然 DevTools 默认启用 restart,但 VSCode 启动 Spring Boot 时有时会跳过某些 profile 激活逻辑,所以不要依赖“默认”。务必在 src/main/resources/application.properties 中写明:
spring.devtools.restart.enabled=true spring.devtools.livereload.enabled=true
若想排除静态资源触发重启(比如你只改 HTML 不想重启),可加:
spring.devtools.restart.exclude=static/**,templates/**,public/**
- 注意路径分隔符用
/,不是\;结尾必须带/**,写成static/无效 - 排除
application.properties本身?别这么做——改端口或日志级别就需要重启,排除后反而卡住调试流 - 如果用了多 profile(如
application-dev.properties),确保 active 的那个 profile 文件里也写了spring.devtools.restart.enabled=true
热部署不生效时优先查 classpath 监听路径和 IDE 缓存
控制台没打印 Restarting due to changes...?先别急着重装插件。直接看 DevTools 实际监听了哪些路径:
- 启动时日志里搜
Restart endpoint,下面会列出file:/.../target/classes/等路径——确认这些路径确实存在且可读 - 如果项目用了非标准结构(比如把 Java 源码放在
src/java而非src/main/java),DevTools 就找不到输出目录,需手动指定:spring.devtools.restart.additional-paths=src/java - VSCode 左下角状态栏点 Java 图标 → “Reload Project”,强制刷新 classpath 缓存;或者删掉
.vscode目录 +target目录后重新打开项目
最常被忽略的一点:Windows 上杀毒软件(尤其是 McAfee、360)会锁定 target/classes 目录,导致文件变更无法被 JVM 文件监视器捕获——临时禁用实时防护再试。











