升 Boot4 后,DevTools Live Reload 默认关闭。本稿讲怎么认、怎么用 spring.devtools.livereload.enabled=true 打开、怎么验,不写 jar 脚本或 endpoint access。
同系列:endpoint 启用属性怎么改、可执行 jar 启动脚本怎么改、Hazelcast 会话怎么迁、Kafka retry 属性怎么改——一句对照,不写进本稿交付。
Boot4 升后为什么 Live Reload 不自动开了?
Spring Boot 4.0 Migration Guide · DevTools Live Reload Support 写得很直:
DevTools Live Reload support is now disabled by default. If you want to use live reload please set spring.devtools.livereload.enabled to true.
也就是说:不是「升完 DevTools 坏了」,而是 4.0 把 Live Reload 从默认 ON 改成了默认 OFF。以前靠改静态资源 / 模板就能让浏览器自动刷的体验,升到 Boot4 后如果没显式打开,常见现象是:
| 改 static / templates 后浏览器不刷新 | Live Reload 默认关 |
| IDE 里「热重载」感觉半截:应用 restart 了,页面不跟 | restart ≠ LiveReload(见后文) |
| 多模块 / 多应用一起起,只有第一个像有 LiveReload | 文档:同一时刻只能跑一个 LiveReload 服务 |
| 误以为是可执行 jar 脚本或 CLASSIC loader 的锅 | 不是同一坑(见边界) |
Developer Tools 参考文档 · LiveReload 同口径:嵌入的 LiveReload server 要用来触发浏览器刷新时,把 spring.devtools.livereload.enabled 设为 true。
本稿只盯 Live Reload 默认关 → 怎么显式打开、怎么验,其它 Boot4 主题见文首内链。
先过一张迁移总览图:

图:Boot3 常默认可用 → Boot4 默认 OFF → 设 livereload.enabled=true → 对照 Guide + 本地冒烟恢复。
要用哪个属性重新打开热重载?
按 Migration Guide / DevTools 文档,主开关就一条:
spring.devtools.livereload.enabled=true
YAML 示意
spring:
devtools:
livereload:
enabled: true
properties 示意
spring.devtools.livereload.enabled=true
也可以写进机器级全局配置(文档 Global Settings):$HOME/.config/spring-boot/spring-boot-devtools.properties(或 yaml/yml),让本机所有用 DevTools 的 Boot 应用都默认打开——适合「团队统一开发体验」而不是每个仓库各写一遍。
文档还提醒两件前置:
另外:完整打包(java -jar 等)场景下 DevTools 会按「生产应用」自动禁用——本地 IDE / bootRun 开发态才是本稿主战场。生产环境不要为了「热刷」去硬开 DevTools。
和可执行 jar 脚本移除是同一坑吗?
不是。 169323724 讲的是 Boot4 Features Removed 里可执行 jar 的 launch scripts 不再生成 / 需改启动方式;本稿是 DevTools Live Reload 默认策略变更。
| 文档落点 | Migration Guide · DevTools Live Reload Support | Features Removed · launch scripts |
| 症状 | 浏览器不自动刷新 | 打包产物/启动脚本行为变了 |
| 改法 | spring.devtools.livereload.enabled=true | 改启动方式 / 脚本策略(见专文) |
| 是否混判 | 勿混 | 勿混 |
升版评审时拆成两条 checklist:一条「开发机 Live Reload」,一条「产物启动脚本」。混在一个 MR 里,日志对不上号。
和 classic loader 移除怎么区分?
主线不同。 CLASSIC loader / 相关 loader 移除属于另一类 Features Removed(brief 备选 C’),和「Live Reload 默认关」不是同一段 Guide。实务上:
- 你在排查 浏览器不刷新 / LiveReload 端口没起来 → 走本稿:livereload.enabled;
- 你在排查 loader / classpath / 旧 CLASSIC 配置残留 → 另开专文,不要拿 livereload.enabled 去顶。
同样,endpoint access(昨日 169441413)管的是 Actuator 启用语义,和 DevTools 浏览器刷新无关。
边界:4.1.0 Deprecated 怎么理解?
DevTools 文档在 LiveReload 节另有一句(以当前文档为准):
Given its decrease in popularity and support, the LiveReload feature is deprecated as of Spring Boot 4.1.0 with no replacement.
写作边界必须咬死:
| Boot 4.0 升版(本稿主线) | Live Reload 默认关闭;用 spring.devtools.livereload.enabled=true 显式打开 | 说「属性已经没了」「4.0 就不能开」 |
| 文档标注 4.1.0 Deprecated | 知晓后续弃用走向;不改变 4.0「默认关→显式开」验收路径 | 把 Deprecated 写成「4.0 属性已消失」 |
| 证据外的「替代方案」 | 不编造 官方未给出的替换开关 | 瞎推第三方当「官方 Replacement」 |
一句话:升到 4.0 要热刷 → 仍用这条属性打开;Deprecated 是后续版本走向提示,不是让你在 4.0 稿子里删掉配置段。
怎么快速核自己的 application 配置?
验收不要只看「应用能启动」。建议把门禁写成可勾选步骤:

图:对照 Guide → 设 enabled=true → 查 DevTools 依赖与 Restart → 本地冒烟 → 边界(勿混 jar/endpoint · Deprecated≠消失)。
1. 对照官方源
打开 Migration Guide 的 DevTools Live Reload Support 小节,确认仍是「disabled by default + spring.devtools.livereload.enabled=true」。再打开 devtools 文档 LiveReload 核同一属性名。
2. 改配置并确认依赖
- 仓库 / profile / 全局 spring-boot-devtools.* 里写上 spring.devtools.livereload.enabled=true;
- 构建里仍有 spring-boot-devtools(Maven optional / Gradle developmentOnly 常见写法见文档);
- 不要在生产打包里为了「能刷页面」去 excludeDevtools=false 硬塞——那是另一安全面。
3. 本地冒烟
若 restart 正常、LiveReload 仍无:查是否多个 LiveReload 抢端口、是否把 restart.enabled 关了、是否其实跑的是打包后的「生产形态」进程。
4. 全文搜「假绿」配置
| spring.devtools.livereload.enabled | 开发 profile 为 true(若你需要热刷) |
| spring.devtools.restart.enabled | 未为了「省事」整段关掉(否则 LiveReload 触发条件不满足) |
| 多应用并行 | 只有需要热刷的那个占 LiveReload |
| 与 jar 脚本 / endpoint access 清单 | 分列,勿同一行改完 |
restart 和 LiveReload 是一回事吗?
不是。 文档结构上分两节:
| Automatic Restart | classpath 变更后重启应用(双 classloader) | spring.devtools.restart.* |
| LiveReload | 资源变更后刷浏览器 | spring.devtools.livereload.enabled |
文档明确:要触发 LiveReload,Automatic Restart 须启用。实务排障口诀:
哪些文件变更会触发 LiveReload?
文档在 Automatic Restart 的「Excluding Resources」里说明:默认情况下,改 /META-INF/maven、/META-INF/resources、/resources、/static、/public、/templates 不会触发完整 restart,但会触发 live reload。这也是前端同学改静态页 / 模板时期望「只刷浏览器、别整应用重启」的路径。
升 Boot4 后若这条链路断了,优先怀疑的是 Live Reload 默认关,而不是「排除路径规则突然变了」。排除规则仍可用 spring.devtools.restart.exclude / additional-exclude 调;但排除再准,没打开 livereload.enabled,浏览器也不会跟。
实务建议把验收拆成两步:
两步都绿,才算 DevTools 开发体验回到「升版前手感」;只绿一步,就按上表对号入座,别互相顶锅。
多 profile / 配置中心怎么落?
很多团队把 DevTools 相关键放在 application-local.yml 或个人全局文件,避免进生产 profile。升 Boot4 时最容易漏的是:
| 仅写在「以前默认 ON、所以仓库里根本没键」 | 升 4.0 后静默变 OFF | 开发 profile 显式写 livereload.enabled=true |
| 写在共享 application.yml 且打进生产包 | 生产误开 DevTools | 用 local / dev profile,或机器级 $HOME/.config/spring-boot/ |
| 配置中心推送旧「布尔开关面板」 | 中心无此键、本地以为开了 | 升版清单里把 livereload.enabled 加进开发配置模板 |
| 文档看到 4.1.0 Deprecated 就删键 | 4.0 线上开发机直接没热刷 | 4.0 主线仍保留显式 true;弃用走向另开技术债单 |
合主分支前用一次「干净 clone + 只起 local profile」回归:不依赖某人本机全局文件里的隐藏配置。全局文件适合个人提效,不适合当团队唯一真相源。
常见误判怎么排?
按出现频率从高到低:
1. 升完以为 DevTools「整模块坏了」 其实 Automatic Restart 往往还在,只是浏览器不刷。先看日志有没有 LiveReload server;没有就查 livereload.enabled。
2. 把 jar 启动脚本移除当成热重载故障 java -jar 本就会按生产形态禁用 DevTools。你在验打包产物却指望热刷,路径就错了——回 IDE / bootRun 验 LiveReload,jar 脚本问题另见专文。
3. IDE 同时起两个 Boot 应用 文档:只能有一个 LiveReload。第二个「怎么配都不刷」时,先停掉多余实例,而不是继续加属性。
4. 关了 restart 想「省 CPU」 LiveReload 触发依赖 Automatic Restart 启用。关 restart 等于砍断触发链。
5. 看到 Deprecated 就删配置 4.1.0 弃用提示 ≠ 4.0 属性无效。本稿验收路径不变:默认关 → 显式开。
6. 和 endpoint access / Hazelcast / Kafka retry 绑同一 MR 症状域完全不同,日志关键字也不同。分 MR,评审更快,回滚更干净。
团队升版清单(开发体验条)
把下面几行贴进 Boot4 升版 runbook 的「本地开发」小节即可:
做完这七步,开发同学对「热重载怎么开」的问题应能自助关闭,不必再在群里反复问「是不是 Boot4 把 DevTools 砍了」。
FAQ
Boot4 升后为什么 Live Reload 不自动开了? Migration Guide:DevTools Live Reload support is now disabled by default。
要用哪个属性重新打开热重载? spring.devtools.livereload.enabled=true(YAML / properties / 全局 devtools 配置均可)。
和可执行 jar 脚本移除是同一坑吗? 不是。jar 是 launch scripts 移除;本稿是 Live Reload 默认策略变更。
和 classic loader 移除怎么区分? CLASSIC loader 属另一 Features Removed 线;浏览器不刷新优先查 livereload.enabled,勿混判。
怎么快速核自己的 application 配置? 对照 Migration Guide + DevTools 文档 → 写上 enabled=true → 确认 DevTools 依赖与 Restart 启用 → IDE 冒烟(日志 + 改静态资源刷浏览器)。注意 4.1.0 Deprecated 提示,勿写成 4.0 属性已消失。
小结 checklist
- 认清变更:Boot4 Live Reload 默认关闭
- 打开方式:spring.devtools.livereload.enabled=true
- 前置:依赖 spring-boot-devtools;Automatic Restart 保持启用
- 约束:同一时刻一个 LiveReload server;开发态而非 java -jar 生产形态
- 对照源:Migration Guide + devtools 文档
- 边界:4.1.0 Deprecated ≠ 4.0 属性消失;勿编造 Replacement
- 勿与 jar 脚本 / endpoint access / Hazelcast Session / Kafka retry / CLASSIC loader 混主线
- 本地冒烟:日志有 LiveReload + 改资源浏览器刷新
按「对照 Guide → 显式 enabled=true → 查 Restart/依赖 → IDE 冒烟」改完,这类踩坑通常一次就能闭环。别在 jar 脚本 / Actuator 两侧来回猜。其它 Boot4 能力见前述内链,本文不展开。
封面建议:深色升级风,左侧大字 Live Reload 默认 OFF,中间箭头指向 spring.devtools.livereload.enabled=true;右侧浏览器刷新图标;角标「勿混 jar 脚本 · 勿混 endpoint access」;标题区放锁定 SEO 标题「Boot4升后DevTools热重载怎么开」。


