<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Spring Boot on 吾爱主机</title><link>https://blog.waihost.com/categories/spring-boot/</link><description>Recent content in Spring Boot on 吾爱主机</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Mon, 29 Jun 2026 15:21:35 +0000</lastBuildDate><atom:link href="https://blog.waihost.com/categories/spring-boot/index.xml" rel="self" type="application/rss+xml"/><item><title>Spring Boot 3.5.16 发布后，团队现在该怎么做：升级、验证与 3.5 生命周期收尾指南</title><link>https://blog.waihost.com/posts/spring-boot-3-5-16-final-oss-guide/</link><pubDate>Mon, 29 Jun 2026 15:21:35 +0000</pubDate><guid>https://blog.waihost.com/posts/spring-boot-3-5-16-final-oss-guide/</guid><description>&lt;img src="https://blog.waihost.com/images/covers/spring-boot-3-5-16-final-oss-guide.svg" alt="Featured image of post Spring Boot 3.5.16 发布后，团队现在该怎么做：升级、验证与 3.5 生命周期收尾指南" /&gt;&lt;p&gt;Spring 团队在 2026-06-25 发布了 &lt;strong&gt;Spring Boot 3.5.16&lt;/strong&gt;。如果你还在 3.5.x 线上维护窗口内，这个版本值得关注，因为它不仅是一个常规补丁版，还带着一个更重要的信号：&lt;strong&gt;3.5.x 已经来到开源维护周期的最后阶段&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;这篇文章不重复官方公告，而是从工程落地角度整理成一份中文操作指南：这次版本到底变了什么、哪些团队应该马上升、升完要验证什么、以及如果你准备继续停留在 3.5 分支，应该怎样安排后续计划。&lt;/p&gt;
&lt;h2 id="一先说结论3516-是什么性质的版本"&gt;&lt;a href="#%e4%b8%80%e5%85%88%e8%af%b4%e7%bb%93%e8%ae%ba3516-%e6%98%af%e4%bb%80%e4%b9%88%e6%80%a7%e8%b4%a8%e7%9a%84%e7%89%88%e6%9c%ac" class="header-anchor"&gt;&lt;/a&gt;一、先说结论：3.5.16 是什么性质的版本
&lt;/h2&gt;&lt;p&gt;根据 Spring 官方博客，&lt;strong&gt;Spring Boot 3.5.16 已于 2026-06-25 发布&lt;/strong&gt;，本次发布包含 &lt;strong&gt;3 项依赖升级&lt;/strong&gt;。同时，官方明确说明它是 &lt;strong&gt;3.5.x 代际的最后一个 OSS 发布版本&lt;/strong&gt;，后续若需要更长周期支持，需要转向商业支持方案。&lt;/p&gt;
&lt;p&gt;结合 Spring Boot GitHub Release 与生命周期数据，可以把这个版本理解成：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;它是 &lt;strong&gt;3.5.x 的收官补丁版本&lt;/strong&gt;；&lt;/li&gt;
&lt;li&gt;它不是一个新特性大版本，而是&lt;strong&gt;维护型版本&lt;/strong&gt;；&lt;/li&gt;
&lt;li&gt;对仍在 3.5.x 的团队来说，它很适合作为该分支的&lt;strong&gt;最终稳定落点&lt;/strong&gt;；&lt;/li&gt;
&lt;li&gt;如果你们还没有升级到 4.0/4.1，那么现在至少应先把 3.5.x 升到 3.5.16，再规划后续迁移。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="二这次实际更新了什么"&gt;&lt;a href="#%e4%ba%8c%e8%bf%99%e6%ac%a1%e5%ae%9e%e9%99%85%e6%9b%b4%e6%96%b0%e4%ba%86%e4%bb%80%e4%b9%88" class="header-anchor"&gt;&lt;/a&gt;二、这次实际更新了什么
&lt;/h2&gt;&lt;p&gt;从 Spring Boot 3.5.16 的 GitHub Release 页面可以确认，本次补丁版包含 3 个依赖升级：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Spring AMQP 3.2.12&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Spring Data BOM 2025.0.13&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Spring Integration 6.5.10&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这说明 3.5.16 的核心价值并不是引入新的框架行为，而是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;对 3.5 代际已纳入管理的依赖做最后一轮维护性更新；&lt;/li&gt;
&lt;li&gt;尽量把生态内相关模块收敛到更稳定的补丁位；&lt;/li&gt;
&lt;li&gt;给仍在 3.5 线上运行的项目提供一个更明确的“最终补丁基线”。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你的应用显式或隐式使用了以下能力，建议优先升级并回归：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;RabbitMQ / Spring AMQP 消息处理；&lt;/li&gt;
&lt;li&gt;Spring Data 相关持久层能力；&lt;/li&gt;
&lt;li&gt;Spring Integration 驱动的集成流、适配器或消息编排。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="三为什么这个版本值得今天就处理"&gt;&lt;a href="#%e4%b8%89%e4%b8%ba%e4%bb%80%e4%b9%88%e8%bf%99%e4%b8%aa%e7%89%88%e6%9c%ac%e5%80%bc%e5%be%97%e4%bb%8a%e5%a4%a9%e5%b0%b1%e5%a4%84%e7%90%86" class="header-anchor"&gt;&lt;/a&gt;三、为什么这个版本值得今天就处理
&lt;/h2&gt;&lt;p&gt;很多团队看到“只有 3 个依赖升级”时，容易觉得可以先放一放。但从维护节奏上看，&lt;strong&gt;这次比功能变化更重要的是支持窗口变化&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;生命周期数据表明：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Spring Boot 3.5&lt;/strong&gt; 首次发布时间为 &lt;strong&gt;2025-05-31&lt;/strong&gt;；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;3.5.x 的 OSS 支持截止日期为 2026-06-30&lt;/strong&gt;；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;商业支持可延长到 2032-06-30&lt;/strong&gt;；&lt;/li&gt;
&lt;li&gt;截至校验时，&lt;strong&gt;3.5 分支最新版本就是 3.5.16（2026-06-25）&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这意味着什么？&lt;/p&gt;
&lt;h3 id="1你还在-35x就应该把-3516-当成收官版看待"&gt;&lt;a href="#1%e4%bd%a0%e8%bf%98%e5%9c%a8-35x%e5%b0%b1%e5%ba%94%e8%af%a5%e6%8a%8a-3516-%e5%bd%93%e6%88%90%e6%94%b6%e5%ae%98%e7%89%88%e7%9c%8b%e5%be%85" class="header-anchor"&gt;&lt;/a&gt;1）你还在 3.5.x，就应该把 3.5.16 当成收官版看待
&lt;/h3&gt;&lt;p&gt;后续即便应用继续稳定运行，也不能再默认期待有新的公开补丁不断跟进。对生产团队来说，&lt;strong&gt;落在最后一个 OSS 补丁版本上&lt;/strong&gt;，比停留在更早的 3.5.x 小版本上更稳妥。&lt;/p&gt;
&lt;h3 id="2升级-3516-和规划下一跳是两件要并行做的事"&gt;&lt;a href="#2%e5%8d%87%e7%ba%a7-3516-%e5%92%8c%e8%a7%84%e5%88%92%e4%b8%8b%e4%b8%80%e8%b7%b3%e6%98%af%e4%b8%a4%e4%bb%b6%e8%a6%81%e5%b9%b6%e8%a1%8c%e5%81%9a%e7%9a%84%e4%ba%8b" class="header-anchor"&gt;&lt;/a&gt;2）升级 3.5.16 和规划下一跳，是两件要并行做的事
&lt;/h3&gt;&lt;p&gt;正确做法不是“反正马上要升 4.x，就不升 3.5.16 了”，而是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;短期&lt;/strong&gt;：先把生产基线更新到 3.5.16；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;中期&lt;/strong&gt;：评估是升到 &lt;strong&gt;4.0&lt;/strong&gt; 还是直接跟进 &lt;strong&gt;4.1&lt;/strong&gt;；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;长期&lt;/strong&gt;：决定是否需要商业支持兜底。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;因为 3.5.16 是补丁升级，风险通常远低于跨代升级。先完成这一步，可以降低你在迁移前的运行风险。&lt;/p&gt;
&lt;h2 id="四哪些项目应该优先升级"&gt;&lt;a href="#%e5%9b%9b%e5%93%aa%e4%ba%9b%e9%a1%b9%e7%9b%ae%e5%ba%94%e8%af%a5%e4%bc%98%e5%85%88%e5%8d%87%e7%ba%a7" class="header-anchor"&gt;&lt;/a&gt;四、哪些项目应该优先升级
&lt;/h2&gt;&lt;p&gt;下面几类项目，建议你优先安排升级窗口：&lt;/p&gt;
&lt;h3 id="1仍在长期维护的存量业务系统"&gt;&lt;a href="#1%e4%bb%8d%e5%9c%a8%e9%95%bf%e6%9c%9f%e7%bb%b4%e6%8a%a4%e7%9a%84%e5%ad%98%e9%87%8f%e4%b8%9a%e5%8a%a1%e7%b3%bb%e7%bb%9f" class="header-anchor"&gt;&lt;/a&gt;1）仍在长期维护的存量业务系统
&lt;/h3&gt;&lt;p&gt;如果系统没有立刻升级到 4.x 的资源，但还要持续运行几个月甚至更久，那么停在 3.5.16 是更合理的选择。&lt;/p&gt;
&lt;h3 id="2依赖-spring-data--spring-integration--amqp-的集成型系统"&gt;&lt;a href="#2%e4%be%9d%e8%b5%96-spring-data--spring-integration--amqp-%e7%9a%84%e9%9b%86%e6%88%90%e5%9e%8b%e7%b3%bb%e7%bb%9f" class="header-anchor"&gt;&lt;/a&gt;2）依赖 Spring Data / Spring Integration / AMQP 的集成型系统
&lt;/h3&gt;&lt;p&gt;这次补丁直接涉及这些依赖线，消息、数据访问、系统集成相关项目更应该完成回归验证。&lt;/p&gt;
&lt;h3 id="3准备做-35--4x-升级演练的团队"&gt;&lt;a href="#3%e5%87%86%e5%a4%87%e5%81%9a-35--4x-%e5%8d%87%e7%ba%a7%e6%bc%94%e7%bb%83%e7%9a%84%e5%9b%a2%e9%98%9f" class="header-anchor"&gt;&lt;/a&gt;3）准备做 3.5 → 4.x 升级演练的团队
&lt;/h3&gt;&lt;p&gt;先把 3.5 基线统一到 3.5.16，再做跨代升级，排障边界会更清晰。否则你很难分辨问题来自：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;旧的 3.5.x 补丁差异；&lt;/li&gt;
&lt;li&gt;还是 4.x 的行为变化。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="五怎么升级到-3516"&gt;&lt;a href="#%e4%ba%94%e6%80%8e%e4%b9%88%e5%8d%87%e7%ba%a7%e5%88%b0-3516" class="header-anchor"&gt;&lt;/a&gt;五、怎么升级到 3.5.16
&lt;/h2&gt;&lt;p&gt;大多数项目只需要改版本号，然后走一次标准构建与回归。&lt;/p&gt;
&lt;h3 id="maven"&gt;&lt;a href="#maven" class="header-anchor"&gt;&lt;/a&gt;Maven
&lt;/h3&gt;&lt;p&gt;如果你使用 &lt;code&gt;spring-boot-starter-parent&lt;/code&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;parent&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.springframework.boot&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;spring-boot-starter-parent&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;3.5.16&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;relativePath/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/parent&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果你使用 Spring Boot BOM：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;dependencyManagement&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;dependencies&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.springframework.boot&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;spring-boot-dependencies&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;3.5.16&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;type&amp;gt;&lt;/span&gt;pom&lt;span class="nt"&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;import&lt;span class="nt"&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/dependencies&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/dependencyManagement&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="gradle"&gt;&lt;a href="#gradle" class="header-anchor"&gt;&lt;/a&gt;Gradle
&lt;/h3&gt;&lt;p&gt;如果你通过 Spring Boot Gradle Plugin 管理版本：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-kotlin" data-lang="kotlin"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plugins&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;org.springframework.boot&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;version&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;3.5.16&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;io.spring.dependency-management&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;version&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;1.1.7&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;kotlin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;jvm&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;version&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2.2.0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果你的项目并不使用 Kotlin 或不需要显式声明这些插件版本，请按你们自己的构建脚本风格调整，核心是把 &lt;strong&gt;Spring Boot 版本对齐到 3.5.16&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id="六升级后重点验证什么"&gt;&lt;a href="#%e5%85%ad%e5%8d%87%e7%ba%a7%e5%90%8e%e9%87%8d%e7%82%b9%e9%aa%8c%e8%af%81%e4%bb%80%e4%b9%88" class="header-anchor"&gt;&lt;/a&gt;六、升级后重点验证什么
&lt;/h2&gt;&lt;p&gt;虽然 3.5.16 本身是补丁版，但 3.5 这一代并不是完全没有行为约束变化。Spring Boot 3.5 Release Notes 中有几项很适合作为升级后的重点回归清单。&lt;/p&gt;
&lt;h3 id="1heapdump-端点默认访问策略变更"&gt;&lt;a href="#1heapdump-%e7%ab%af%e7%82%b9%e9%bb%98%e8%ae%a4%e8%ae%bf%e9%97%ae%e7%ad%96%e7%95%a5%e5%8f%98%e6%9b%b4" class="header-anchor"&gt;&lt;/a&gt;1）&lt;code&gt;heapdump&lt;/code&gt; 端点默认访问策略变更
&lt;/h3&gt;&lt;p&gt;在 3.5 代际中，&lt;code&gt;heapdump&lt;/code&gt; Actuator 端点默认变成了 &lt;code&gt;access=NONE&lt;/code&gt;。如果你们过去只做了暴露配置，没有显式设置访问策略，那么升级后相关诊断链路可能与旧行为不同。&lt;/p&gt;
&lt;p&gt;如果你确实需要启用它，应同时配置暴露与访问权限，例如：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;management&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;endpoints&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;web&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;exposure&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;include&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;heapdump&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;endpoint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;heapdump&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;access&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;unrestricted&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;建议你在测试环境确认：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;端点是否仍按预期可访问；&lt;/li&gt;
&lt;li&gt;安全配置是否仍符合内网/零信任策略；&lt;/li&gt;
&lt;li&gt;是否存在把高敏感诊断端点暴露到错误网络边界的风险。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="2布尔型配置值解析更严格"&gt;&lt;a href="#2%e5%b8%83%e5%b0%94%e5%9e%8b%e9%85%8d%e7%bd%ae%e5%80%bc%e8%a7%a3%e6%9e%90%e6%9b%b4%e4%b8%a5%e6%a0%bc" class="header-anchor"&gt;&lt;/a&gt;2）布尔型配置值解析更严格
&lt;/h3&gt;&lt;p&gt;3.5 代际对 &lt;code&gt;.enabled&lt;/code&gt; 这类布尔配置的可接受值收紧为更一致的 &lt;code&gt;true&lt;/code&gt; / &lt;code&gt;false&lt;/code&gt;。如果你的历史配置里混入了不规范值，升级后应检查是否产生行为变化。&lt;/p&gt;
&lt;p&gt;建议排查：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;application.yml&lt;/code&gt; / &lt;code&gt;application.properties&lt;/code&gt;；&lt;/li&gt;
&lt;li&gt;环境变量注入后的映射值；&lt;/li&gt;
&lt;li&gt;Helm Chart / Kustomize / Ansible 模板里的布尔值渲染方式。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="3profile-命名校验更严格但-351-起已部分放宽"&gt;&lt;a href="#3profile-%e5%91%bd%e5%90%8d%e6%a0%a1%e9%aa%8c%e6%9b%b4%e4%b8%a5%e6%a0%bc%e4%bd%86-351-%e8%b5%b7%e5%b7%b2%e9%83%a8%e5%88%86%e6%94%be%e5%ae%bd" class="header-anchor"&gt;&lt;/a&gt;3）Profile 命名校验更严格，但 3.5.1 起已部分放宽
&lt;/h3&gt;&lt;p&gt;Spring Boot 3.5 代际增强了 Profile 命名校验；官方 Release Notes 同时说明：&lt;strong&gt;从 3.5.1 开始，这些限制已部分放宽，额外允许 &lt;code&gt;.&lt;/code&gt;、&lt;code&gt;+&lt;/code&gt;、&lt;code&gt;@&lt;/code&gt; 字符&lt;/strong&gt;，也可以通过 &lt;code&gt;spring.profiles.validate=false&lt;/code&gt; 关闭校验。&lt;/p&gt;
&lt;p&gt;如果你们组织里有历史遗留 Profile 命名习惯，比如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;prod-cn&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gray@hz&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;perf.test&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;建议在升级后跑一次完整启动验证，确认 Profile 解析与加载顺序没有偏差。&lt;/p&gt;
&lt;h3 id="4按名称注入-taskexecutor-的代码需要留意"&gt;&lt;a href="#4%e6%8c%89%e5%90%8d%e7%a7%b0%e6%b3%a8%e5%85%a5-taskexecutor-%e7%9a%84%e4%bb%a3%e7%a0%81%e9%9c%80%e8%a6%81%e7%95%99%e6%84%8f" class="header-anchor"&gt;&lt;/a&gt;4）按名称注入 &lt;code&gt;taskExecutor&lt;/code&gt; 的代码需要留意
&lt;/h3&gt;&lt;p&gt;Spring Boot 3.5 Release Notes 明确指出：自动配置的 &lt;code&gt;TaskExecutor&lt;/code&gt; 不再同时提供 &lt;code&gt;taskExecutor&lt;/code&gt; 和 &lt;code&gt;applicationTaskExecutor&lt;/code&gt; 两个 Bean 名称，&lt;strong&gt;现在只提供 &lt;code&gt;applicationTaskExecutor&lt;/code&gt;&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;如果你们代码里存在按名称获取执行器的写法，例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;@Qualifier(&amp;quot;taskExecutor&amp;quot;)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;手动 &lt;code&gt;getBean(&amp;quot;taskExecutor&amp;quot;)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;XML 或脚本化配置里写死旧名称&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;那就要重点回归这部分逻辑。更稳妥的做法是改成依赖 &lt;code&gt;applicationTaskExecutor&lt;/code&gt;，避免在未来版本继续背兼容包袱。&lt;/p&gt;
&lt;h2 id="七升级前后的实操检查单"&gt;&lt;a href="#%e4%b8%83%e5%8d%87%e7%ba%a7%e5%89%8d%e5%90%8e%e7%9a%84%e5%ae%9e%e6%93%8d%e6%a3%80%e6%9f%a5%e5%8d%95" class="header-anchor"&gt;&lt;/a&gt;七、升级前后的实操检查单
&lt;/h2&gt;&lt;p&gt;为了让这次补丁升级更可控，可以按下面的顺序执行。&lt;/p&gt;
&lt;h3 id="升级前"&gt;&lt;a href="#%e5%8d%87%e7%ba%a7%e5%89%8d" class="header-anchor"&gt;&lt;/a&gt;升级前
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;锁定当前生产版本与构建产物；&lt;/li&gt;
&lt;li&gt;导出一份依赖树，确认是否显式覆盖了 Spring AMQP、Spring Data、Spring Integration 相关版本；&lt;/li&gt;
&lt;li&gt;识别所有依赖 &lt;code&gt;Actuator&lt;/code&gt;、&lt;code&gt;TaskExecutor&lt;/code&gt;、Profile、布尔配置开关的模块；&lt;/li&gt;
&lt;li&gt;准备至少一轮完整的自动化测试与一轮烟雾验证。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="升级中"&gt;&lt;a href="#%e5%8d%87%e7%ba%a7%e4%b8%ad" class="header-anchor"&gt;&lt;/a&gt;升级中
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;把 Spring Boot 版本提升到 &lt;strong&gt;3.5.16&lt;/strong&gt;；&lt;/li&gt;
&lt;li&gt;执行依赖刷新；&lt;/li&gt;
&lt;li&gt;运行单元测试、集成测试、启动测试；&lt;/li&gt;
&lt;li&gt;对消息链路、数据库访问、接口调用、定时任务做重点验证。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="升级后"&gt;&lt;a href="#%e5%8d%87%e7%ba%a7%e5%90%8e" class="header-anchor"&gt;&lt;/a&gt;升级后
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;检查 &lt;code&gt;/actuator/health&lt;/code&gt;、&lt;code&gt;/actuator/info&lt;/code&gt; 以及你们自定义观测端点；&lt;/li&gt;
&lt;li&gt;检查日志里是否出现 Bean 注入名称变化、配置绑定失败、Profile 校验失败；&lt;/li&gt;
&lt;li&gt;观察消息积压、线程池使用率、慢 SQL、启动耗时；&lt;/li&gt;
&lt;li&gt;将 3.5.16 标记为 3.5 分支最终基线，并启动 4.x 升级计划。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="八现在是继续留在-35还是直接上-4x"&gt;&lt;a href="#%e5%85%ab%e7%8e%b0%e5%9c%a8%e6%98%af%e7%bb%a7%e7%bb%ad%e7%95%99%e5%9c%a8-35%e8%bf%98%e6%98%af%e7%9b%b4%e6%8e%a5%e4%b8%8a-4x" class="header-anchor"&gt;&lt;/a&gt;八、现在是继续留在 3.5，还是直接上 4.x？
&lt;/h2&gt;&lt;p&gt;截至核实时，Spring 官方项目页显示 &lt;strong&gt;Spring Boot 当前最新主线版本为 4.1.0&lt;/strong&gt;。因此从路线选择看，团队通常有三种策略：&lt;/p&gt;
&lt;h3 id="策略-a先稳定到-3516再规划-41"&gt;&lt;a href="#%e7%ad%96%e7%95%a5-a%e5%85%88%e7%a8%b3%e5%ae%9a%e5%88%b0-3516%e5%86%8d%e8%a7%84%e5%88%92-41" class="header-anchor"&gt;&lt;/a&gt;策略 A：先稳定到 3.5.16，再规划 4.1
&lt;/h3&gt;&lt;p&gt;适合：生产系统多、变更窗口谨慎、近期不适合跨代升级的团队。&lt;/p&gt;
&lt;p&gt;优点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;风险最低；&lt;/li&gt;
&lt;li&gt;便于先完成一次补丁级基线收敛；&lt;/li&gt;
&lt;li&gt;给 4.x 迁移预留独立测试周期。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="策略-b在测试环境同时启动-3516-与-41-双线验证"&gt;&lt;a href="#%e7%ad%96%e7%95%a5-b%e5%9c%a8%e6%b5%8b%e8%af%95%e7%8e%af%e5%a2%83%e5%90%8c%e6%97%b6%e5%90%af%e5%8a%a8-3516-%e4%b8%8e-41-%e5%8f%8c%e7%ba%bf%e9%aa%8c%e8%af%81" class="header-anchor"&gt;&lt;/a&gt;策略 B：在测试环境同时启动 3.5.16 与 4.1 双线验证
&lt;/h3&gt;&lt;p&gt;适合：平台团队、公共框架团队、拥有较强自动化测试体系的组织。&lt;/p&gt;
&lt;p&gt;优点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;能同步评估短期稳定性与中期迁移成本；&lt;/li&gt;
&lt;li&gt;更早暴露跨代兼容性问题；&lt;/li&gt;
&lt;li&gt;有利于制定统一升级路线。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="策略-c如果必须长期停留-35评估商业支持"&gt;&lt;a href="#%e7%ad%96%e7%95%a5-c%e5%a6%82%e6%9e%9c%e5%bf%85%e9%a1%bb%e9%95%bf%e6%9c%9f%e5%81%9c%e7%95%99-35%e8%af%84%e4%bc%b0%e5%95%86%e4%b8%9a%e6%94%af%e6%8c%81" class="header-anchor"&gt;&lt;/a&gt;策略 C：如果必须长期停留 3.5，评估商业支持
&lt;/h3&gt;&lt;p&gt;适合：合规要求高、升级窗口长、系统耦合深的企业场景。&lt;/p&gt;
&lt;p&gt;因为官方已经明确 3.5.x 的 OSS 周期结束在即，所以“长期停留但不做支持兜底”会越来越被动。&lt;/p&gt;
&lt;h2 id="九给团队负责人的建议"&gt;&lt;a href="#%e4%b9%9d%e7%bb%99%e5%9b%a2%e9%98%9f%e8%b4%9f%e8%b4%a3%e4%ba%ba%e7%9a%84%e5%bb%ba%e8%ae%ae" class="header-anchor"&gt;&lt;/a&gt;九、给团队负责人的建议
&lt;/h2&gt;&lt;p&gt;如果你是技术负责人、架构师或中台维护者，我更建议把这次发布当成一个&lt;strong&gt;版本治理节点&lt;/strong&gt;，而不是一次普通补丁升级。&lt;/p&gt;
&lt;p&gt;你可以在本周内完成三件事：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;把所有 3.5.x 服务统一到 3.5.16&lt;/strong&gt;；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;拉出仍按名称依赖 &lt;code&gt;taskExecutor&lt;/code&gt;、依赖宽松布尔配置、依赖旧 profile 命名习惯的模块清单&lt;/strong&gt;；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;明确 4.0 / 4.1 的迁移时间表与负责人&lt;/strong&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这样做的好处是，你不会在 3.5 OSS 窗口结束后，仍把版本决策停留在“以后再说”。&lt;/p&gt;
&lt;h2 id="十总结"&gt;&lt;a href="#%e5%8d%81%e6%80%bb%e7%bb%93" class="header-anchor"&gt;&lt;/a&gt;十、总结
&lt;/h2&gt;&lt;p&gt;Spring Boot 3.5.16 表面上只是一次小型维护发布，但它的意义并不小：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;它是 &lt;strong&gt;Spring Boot 3.5.x 的最后一个 OSS 发布版本&lt;/strong&gt;；&lt;/li&gt;
&lt;li&gt;它把 &lt;strong&gt;Spring AMQP 3.2.12、Spring Data BOM 2025.0.13、Spring Integration 6.5.10&lt;/strong&gt; 纳入最终补丁基线；&lt;/li&gt;
&lt;li&gt;它适合作为仍在 3.5 分支上的团队的&lt;strong&gt;最终稳定落点&lt;/strong&gt;；&lt;/li&gt;
&lt;li&gt;它也在提醒你：&lt;strong&gt;该开始准备 4.x 了&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你今天只能做一件事，那就先把测试环境升到 &lt;strong&gt;3.5.16&lt;/strong&gt;，跑完关键回归，再安排生产发布窗口。对仍处在 3.5 生命周期尾段的系统来说，这是成本最低、收益最高的一步。&lt;/p&gt;</description></item><item><title>Spring Boot 4.0 正式发布后该怎么升级：核心变化、兼容性影响与实战建议</title><link>https://blog.waihost.com/posts/spring-boot-4-0-upgrade-guide/</link><pubDate>Mon, 29 Jun 2026 14:40:54 +0000</pubDate><guid>https://blog.waihost.com/posts/spring-boot-4-0-upgrade-guide/</guid><description>&lt;img src="https://blog.waihost.com/images/covers/spring-boot-4-0-upgrade-guide.svg" alt="Featured image of post Spring Boot 4.0 正式发布后该怎么升级：核心变化、兼容性影响与实战建议" /&gt;&lt;p&gt;Spring Boot 4.0 已经正式 GA。对很多 Java 团队来说，这不是一次普通的小版本升级，而是一次带有明显“代际变化”特征的升级：底座切换到 Spring Framework 7，运行基线与依赖兼容性被整体抬高，同时也带来了更现代的工程能力。&lt;/p&gt;
&lt;p&gt;如果你关心的问题是“Spring Boot 4.0 到底带来了什么”“现有项目升不升、怎么升、坑在哪”，这篇文章会从&lt;strong&gt;已公开的官方信息&lt;/strong&gt;出发，梳理它的核心变化、升级影响以及更稳妥的落地路径。&lt;/p&gt;
&lt;h2 id="spring-boot-40-现在处于什么状态"&gt;&lt;a href="#spring-boot-40-%e7%8e%b0%e5%9c%a8%e5%a4%84%e4%ba%8e%e4%bb%80%e4%b9%88%e7%8a%b6%e6%80%81" class="header-anchor"&gt;&lt;/a&gt;Spring Boot 4.0 现在处于什么状态
&lt;/h2&gt;&lt;p&gt;从 Spring 官方博客可以确认，&lt;strong&gt;Spring Boot 4.0.0 已于 2025-11-20 正式发布&lt;/strong&gt;，并且已经可以从 Maven Central 获取。与此同时，Spring 官方文档站已经提供 4.0.x 文档线，这说明 4.0 不再是预览版，而是进入了正式维护周期。&lt;/p&gt;
&lt;p&gt;这意味着对于已经在 3.x 稳定运行的团队来说，现在讨论的重点已经不再是“能不能尝鲜”，而是“是否值得安排升级窗口，以及怎么降低升级风险”。&lt;/p&gt;
&lt;h2 id="为什么说-spring-boot-40-是一次代际升级"&gt;&lt;a href="#%e4%b8%ba%e4%bb%80%e4%b9%88%e8%af%b4-spring-boot-40-%e6%98%af%e4%b8%80%e6%ac%a1%e4%bb%a3%e9%99%85%e5%8d%87%e7%ba%a7" class="header-anchor"&gt;&lt;/a&gt;为什么说 Spring Boot 4.0 是一次代际升级
&lt;/h2&gt;&lt;p&gt;Spring 官方对 4.0 的定调非常明确：它是&lt;strong&gt;构建在 Spring Framework 7 之上的新一代 Spring Boot&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;这句话的分量很重。因为这意味着它不只是新增几个 starter 或者小幅改造自动配置，而是整个技术基线都随之上移。很多团队在迁移时遇到的问题，根源并不在 Boot 自身，而是出在与之配套的 Java 版本、Servlet 基线、第三方依赖、容器选择和老旧 API 使用方式上。&lt;/p&gt;
&lt;p&gt;换句话说，Spring Boot 4.0 的价值和成本都比常规次版本升级更高：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;价值在于它把 Spring 生态带入了新的工程阶段；&lt;/li&gt;
&lt;li&gt;成本在于你必须把项目的“底层地基”一起升级。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="spring-boot-40-的核心变化有哪些"&gt;&lt;a href="#spring-boot-40-%e7%9a%84%e6%a0%b8%e5%bf%83%e5%8f%98%e5%8c%96%e6%9c%89%e5%93%aa%e4%ba%9b" class="header-anchor"&gt;&lt;/a&gt;Spring Boot 4.0 的核心变化有哪些
&lt;/h2&gt;&lt;h3 id="1-基于-spring-framework-7"&gt;&lt;a href="#1-%e5%9f%ba%e4%ba%8e-spring-framework-7" class="header-anchor"&gt;&lt;/a&gt;1. 基于 Spring Framework 7
&lt;/h3&gt;&lt;p&gt;这是所有变化的起点。Spring Boot 4.0 不是孤立演进，而是直接建立在 Spring Framework 7 之上。&lt;/p&gt;
&lt;p&gt;对于开发者来说，这意味着：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Spring 体系下的一些长期演进点会在 4.0 更集中地体现出来；&lt;/li&gt;
&lt;li&gt;与 Framework 7 绑定的兼容性要求会直接影响 Boot 项目；&lt;/li&gt;
&lt;li&gt;周边生态是否支持 Spring Framework 7，会成为升级前必须核查的事项。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="2-spring-boot-代码库完成模块化重构"&gt;&lt;a href="#2-spring-boot-%e4%bb%a3%e7%a0%81%e5%ba%93%e5%ae%8c%e6%88%90%e6%a8%a1%e5%9d%97%e5%8c%96%e9%87%8d%e6%9e%84" class="header-anchor"&gt;&lt;/a&gt;2. Spring Boot 代码库完成模块化重构
&lt;/h3&gt;&lt;p&gt;官方将其描述为 &lt;strong&gt;complete modularization of the Spring Boot codebase&lt;/strong&gt;。这不是一个面向业务代码直接可见的“语法特性”，但它对框架演进很重要。&lt;/p&gt;
&lt;p&gt;模块化重构带来的直接信号是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Spring Boot 内部的职责边界更加清晰；&lt;/li&gt;
&lt;li&gt;产物会朝着&lt;strong&gt;更小、更聚焦的 jar&lt;/strong&gt; 方向演进；&lt;/li&gt;
&lt;li&gt;对后续自动配置裁剪、维护成本控制和长期扩展更友好。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你所在团队很关注启动体积、依赖治理和框架透明度，这会是一个值得关注的变化。&lt;/p&gt;
&lt;h3 id="3-null-safety-增强引入-jspecify-方向的统一改进"&gt;&lt;a href="#3-null-safety-%e5%a2%9e%e5%bc%ba%e5%bc%95%e5%85%a5-jspecify-%e6%96%b9%e5%90%91%e7%9a%84%e7%bb%9f%e4%b8%80%e6%94%b9%e8%bf%9b" class="header-anchor"&gt;&lt;/a&gt;3. Null Safety 增强，引入 JSpecify 方向的统一改进
&lt;/h3&gt;&lt;p&gt;官方明确提到，Spring Boot 4.0 在整个产品线范围内加强了 &lt;strong&gt;null safety&lt;/strong&gt;，并采用 &lt;strong&gt;JSpecify&lt;/strong&gt; 相关改进。&lt;/p&gt;
&lt;p&gt;这类变化不会像一个新 starter 那样直观，但它会逐步影响：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;IDE 的静态提示；&lt;/li&gt;
&lt;li&gt;Java / Kotlin 混合工程中的空安全语义；&lt;/li&gt;
&lt;li&gt;编译期和分析期对潜在 NPE 风险的暴露。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对老项目来说，这也意味着一些“以前没出事但本来就不安全”的写法，可能会在升级后更容易被工具识别出来。&lt;/p&gt;
&lt;h3 id="4-java-25-一等支持同时最低仍要求-java-17"&gt;&lt;a href="#4-java-25-%e4%b8%80%e7%ad%89%e6%94%af%e6%8c%81%e5%90%8c%e6%97%b6%e6%9c%80%e4%bd%8e%e4%bb%8d%e8%a6%81%e6%b1%82-java-17" class="header-anchor"&gt;&lt;/a&gt;4. Java 25 一等支持，同时最低仍要求 Java 17
&lt;/h3&gt;&lt;p&gt;Spring 官方对 Java 支持给出了非常清晰的说法：Spring Boot 4.0 对 &lt;strong&gt;Java 25 提供一等支持&lt;/strong&gt;，同时继续兼容 &lt;strong&gt;Java 17&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;从官方系统要求页还能进一步确认：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Spring Boot 4.0.x &lt;strong&gt;最低需要 Java 17&lt;/strong&gt;；&lt;/li&gt;
&lt;li&gt;当前文档线显示其兼容范围可覆盖更高版本 Java；&lt;/li&gt;
&lt;li&gt;它要求与 Spring Framework 7.0.x 配套使用。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这说明两件事：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;如果你的项目还停留在 Java 11 或更低，升级 Boot 4.0 就不是单纯改依赖版本，而是一次 JDK 基线升级项目；&lt;/li&gt;
&lt;li&gt;如果你已经在 Java 17 或更高版本上运行，那么迁移门槛会显著降低。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="5-http-service-clients-获得自动配置支持"&gt;&lt;a href="#5-http-service-clients-%e8%8e%b7%e5%be%97%e8%87%aa%e5%8a%a8%e9%85%8d%e7%bd%ae%e6%94%af%e6%8c%81" class="header-anchor"&gt;&lt;/a&gt;5. HTTP Service Clients 获得自动配置支持
&lt;/h3&gt;&lt;p&gt;Spring Boot 4.0 Release Notes 提到，它新增了 &lt;strong&gt;HTTP Service Clients 的自动配置支持与配置属性支持&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;这类能力的价值在于：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;可以通过接口式、声明式方式定义 HTTP 调用；&lt;/li&gt;
&lt;li&gt;比手写一层层 WebClient / RestTemplate 包装更简洁；&lt;/li&gt;
&lt;li&gt;更适合内部服务调用、SDK 化封装和接口契约式开发。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你的系统中已经存在大量对外部服务或内部微服务的 HTTP 调用，这部分能力值得重点关注，因为它能让调用层写法更现代、更一致。&lt;/p&gt;
&lt;h3 id="6-mvc-与-webflux-获得-api-versioning-自动配置"&gt;&lt;a href="#6-mvc-%e4%b8%8e-webflux-%e8%8e%b7%e5%be%97-api-versioning-%e8%87%aa%e5%8a%a8%e9%85%8d%e7%bd%ae" class="header-anchor"&gt;&lt;/a&gt;6. MVC 与 WebFlux 获得 API Versioning 自动配置
&lt;/h3&gt;&lt;p&gt;Spring Boot 4.0 还正式引入了 &lt;strong&gt;API Versioning 自动配置&lt;/strong&gt;，并同时支持：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Spring MVC&lt;/li&gt;
&lt;li&gt;Spring WebFlux&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这意味着 API 版本治理从“每个团队自己约定、自己封装”进一步走向“框架级支持”。&lt;/p&gt;
&lt;p&gt;对于存在以下需求的系统，这个改动很有价值：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;同时维护多个 API 版本；&lt;/li&gt;
&lt;li&gt;对旧客户端进行平滑兼容；&lt;/li&gt;
&lt;li&gt;需要在版本治理层面减少重复样板代码。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="7-jms-支持扩展到新的-jmsclient-api"&gt;&lt;a href="#7-jms-%e6%94%af%e6%8c%81%e6%89%a9%e5%b1%95%e5%88%b0%e6%96%b0%e7%9a%84-jmsclient-api" class="header-anchor"&gt;&lt;/a&gt;7. JMS 支持扩展到新的 JmsClient API
&lt;/h3&gt;&lt;p&gt;对于仍在使用 JMS 的企业应用场景，Spring Boot 4.0 的自动配置现在支持新的 &lt;strong&gt;JmsClient API&lt;/strong&gt;，同时保持对 &lt;strong&gt;JmsTemplate&lt;/strong&gt; 和 &lt;strong&gt;JmsMessagingTemplate&lt;/strong&gt; 的兼容。&lt;/p&gt;
&lt;p&gt;这意味着老系统不会被强迫一次性大改，但新接口能力已经被纳入官方支持范围，团队可以根据节奏逐步迁移。&lt;/p&gt;
&lt;h3 id="8-taskdecorator-组合能力增强"&gt;&lt;a href="#8-taskdecorator-%e7%bb%84%e5%90%88%e8%83%bd%e5%8a%9b%e5%a2%9e%e5%bc%ba" class="header-anchor"&gt;&lt;/a&gt;8. TaskDecorator 组合能力增强
&lt;/h3&gt;&lt;p&gt;在任务执行和任务调度自动配置方面，Spring Boot 4.0 支持多个 &lt;strong&gt;TaskDecorator&lt;/strong&gt;，并会将它们组合成 &lt;strong&gt;CompositeTaskDecorator&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;这个变化对日常业务代码未必显眼，但对工程化能力很有帮助，尤其在这些场景下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;链路追踪上下文透传；&lt;/li&gt;
&lt;li&gt;日志 MDC 传递；&lt;/li&gt;
&lt;li&gt;租户上下文封装；&lt;/li&gt;
&lt;li&gt;审计信息注入。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对于对异步任务治理比较重视的团队，这属于非常实用的增强。&lt;/p&gt;
&lt;h3 id="9-新增-opentelemetry-starter"&gt;&lt;a href="#9-%e6%96%b0%e5%a2%9e-opentelemetry-starter" class="header-anchor"&gt;&lt;/a&gt;9. 新增 OpenTelemetry starter
&lt;/h3&gt;&lt;p&gt;Spring Boot 4.0 新增了 &lt;strong&gt;&lt;code&gt;spring-boot-starter-opentelemetry&lt;/code&gt;&lt;/strong&gt;，并会自动带入面向 &lt;strong&gt;OTLP&lt;/strong&gt; 的指标与链路导出依赖，同时自动配置 OpenTelemetry SDK。&lt;/p&gt;
&lt;p&gt;这释放出一个非常明确的信号：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;Spring Boot 在可观测性方向上，正进一步向 OpenTelemetry 标准体系靠拢。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;如果你的系统正在推进云原生可观测性，或者已经使用统一的 metrics / traces 采集链路，那么 4.0 会比过去更顺手。&lt;/p&gt;
&lt;h3 id="10-gradle-9-支持"&gt;&lt;a href="#10-gradle-9-%e6%94%af%e6%8c%81" class="header-anchor"&gt;&lt;/a&gt;10. Gradle 9 支持
&lt;/h3&gt;&lt;p&gt;官方 Release Notes 明确确认：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Spring Boot 4.0 支持 &lt;strong&gt;Gradle 9&lt;/strong&gt;；&lt;/li&gt;
&lt;li&gt;同时继续支持 &lt;strong&gt;Gradle 8.14+&lt;/strong&gt;；&lt;/li&gt;
&lt;li&gt;Maven 方面要求 &lt;strong&gt;3.6.3+&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你的项目使用 Gradle，并且一直想与新版本构建链路保持同步，4.0 在这方面给出了比较明确的支持保证。&lt;/p&gt;
&lt;h2 id="升级到-spring-boot-40-时真正需要注意什么"&gt;&lt;a href="#%e5%8d%87%e7%ba%a7%e5%88%b0-spring-boot-40-%e6%97%b6%e7%9c%9f%e6%ad%a3%e9%9c%80%e8%a6%81%e6%b3%a8%e6%84%8f%e4%bb%80%e4%b9%88" class="header-anchor"&gt;&lt;/a&gt;升级到 Spring Boot 4.0 时真正需要注意什么
&lt;/h2&gt;&lt;p&gt;对于大多数团队来说，真正决定“能不能顺利升级”的，不是新特性，而是下面这些兼容性影响。&lt;/p&gt;
&lt;h3 id="1-官方建议先升到最新-35x再升-40"&gt;&lt;a href="#1-%e5%ae%98%e6%96%b9%e5%bb%ba%e8%ae%ae%e5%85%88%e5%8d%87%e5%88%b0%e6%9c%80%e6%96%b0-35x%e5%86%8d%e5%8d%87-40" class="header-anchor"&gt;&lt;/a&gt;1. 官方建议：先升到最新 3.5.x，再升 4.0
&lt;/h3&gt;&lt;p&gt;Spring 官方 Release Notes 和 Migration Guide 都明确建议：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;如果你当前项目还不在 3.5.x，最好先升级到最新 3.5.x，再迁移到 4.0。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;这是一个非常实用的建议。&lt;/p&gt;
&lt;p&gt;因为跨越多个大/小版本直接跳到 4.0，意味着你会同时面对：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;旧依赖问题；&lt;/li&gt;
&lt;li&gt;废弃 API 问题；&lt;/li&gt;
&lt;li&gt;配置属性变更问题；&lt;/li&gt;
&lt;li&gt;底层基线问题。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;而如果先对齐到 3.5.x，再迁移到 4.0，很多问题会更容易分层定位。&lt;/p&gt;
&lt;h3 id="2-javakotlingraalvmservlet-基线整体抬升"&gt;&lt;a href="#2-javakotlingraalvmservlet-%e5%9f%ba%e7%ba%bf%e6%95%b4%e4%bd%93%e6%8a%ac%e5%8d%87" class="header-anchor"&gt;&lt;/a&gt;2. Java、Kotlin、GraalVM、Servlet 基线整体抬升
&lt;/h3&gt;&lt;p&gt;官方 Migration Guide 给出的迁移基线包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Java 17+&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kotlin 2.2+&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GraalVM native-image 25+&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Jakarta EE 11&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Servlet 6.1 baseline&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这意味着，如果你的项目还有这些历史包袱：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;老 JDK；&lt;/li&gt;
&lt;li&gt;低版本 Kotlin；&lt;/li&gt;
&lt;li&gt;旧 native-image 构建链；&lt;/li&gt;
&lt;li&gt;旧 servlet 容器；&lt;/li&gt;
&lt;li&gt;对 Jakarta 升级准备不足；&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;那么升级 Boot 4.0 的工作量会比“改 pom 版本号”大得多。&lt;/p&gt;
&lt;h3 id="3-undertow-支持被移除"&gt;&lt;a href="#3-undertow-%e6%94%af%e6%8c%81%e8%a2%ab%e7%a7%bb%e9%99%a4" class="header-anchor"&gt;&lt;/a&gt;3. Undertow 支持被移除
&lt;/h3&gt;&lt;p&gt;这是 4.0 升级里最容易被忽略、但实际影响很大的点之一。&lt;/p&gt;
&lt;p&gt;官方 Migration Guide 明确指出：由于 Spring Boot 4.0 需要 &lt;strong&gt;Servlet 6.1 baseline&lt;/strong&gt;，而 &lt;strong&gt;Undertow 当前不兼容这一基线&lt;/strong&gt;，因此 Boot 4 &lt;strong&gt;移除了 Undertow 支持&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;这包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Undertow starter&lt;/li&gt;
&lt;li&gt;作为嵌入式服务器的 Undertow 能力&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你的应用当前使用 Undertow，那么升级到 4.0 时必须评估迁移到：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tomcat 11.0.x&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Jetty 12.1.x&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这不是一个可忽略的 warning，而是明确的支持移除。&lt;/p&gt;
&lt;h3 id="4-spring-boot-3x-中已废弃的类方法配置在-40-中可能已经删除"&gt;&lt;a href="#4-spring-boot-3x-%e4%b8%ad%e5%b7%b2%e5%ba%9f%e5%bc%83%e7%9a%84%e7%b1%bb%e6%96%b9%e6%b3%95%e9%85%8d%e7%bd%ae%e5%9c%a8-40-%e4%b8%ad%e5%8f%af%e8%83%bd%e5%b7%b2%e7%bb%8f%e5%88%a0%e9%99%a4" class="header-anchor"&gt;&lt;/a&gt;4. Spring Boot 3.x 中已废弃的类、方法、配置，在 4.0 中可能已经删除
&lt;/h3&gt;&lt;p&gt;官方 Migration Guide 明确说明：&lt;strong&gt;Spring Boot 3.x 中标记为 deprecated 的 classes、methods、properties，在 4.0 中已经被删除。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这会带来几类典型问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;编译失败；&lt;/li&gt;
&lt;li&gt;启动失败；&lt;/li&gt;
&lt;li&gt;配置项失效但不一定立即显眼；&lt;/li&gt;
&lt;li&gt;某些集成测试才暴露行为变化。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以在升级前，最好先把当前项目里所有 Boot 3.x 已知的 deprecated 用法清理一遍，不要把这些历史债务带进 4.0。&lt;/p&gt;
&lt;h3 id="5-配置属性迁移建议使用-spring-boot-properties-migrator"&gt;&lt;a href="#5-%e9%85%8d%e7%bd%ae%e5%b1%9e%e6%80%a7%e8%bf%81%e7%a7%bb%e5%bb%ba%e8%ae%ae%e4%bd%bf%e7%94%a8-spring-boot-properties-migrator" class="header-anchor"&gt;&lt;/a&gt;5. 配置属性迁移建议使用 &lt;code&gt;spring-boot-properties-migrator&lt;/code&gt;
&lt;/h3&gt;&lt;p&gt;对于配置项重命名或移除问题，官方建议可以在升级阶段&lt;strong&gt;临时引入&lt;/strong&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.springframework.boot&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;spring-boot-properties-migrator&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;runtime&lt;span class="nt"&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这个工具的作用是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在启动时分析环境配置；&lt;/li&gt;
&lt;li&gt;打印属性迁移相关诊断信息；&lt;/li&gt;
&lt;li&gt;对部分已改名属性提供运行时迁移帮助。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;但要注意两点：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;它只是迁移辅助工具，不是长期依赖；&lt;/li&gt;
&lt;li&gt;迁移完成后应该移除。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="6-第三方依赖兼容性比-boot-自身更值得重点检查"&gt;&lt;a href="#6-%e7%ac%ac%e4%b8%89%e6%96%b9%e4%be%9d%e8%b5%96%e5%85%bc%e5%ae%b9%e6%80%a7%e6%af%94-boot-%e8%87%aa%e8%ba%ab%e6%9b%b4%e5%80%bc%e5%be%97%e9%87%8d%e7%82%b9%e6%a3%80%e6%9f%a5" class="header-anchor"&gt;&lt;/a&gt;6. 第三方依赖兼容性比 Boot 自身更值得重点检查
&lt;/h3&gt;&lt;p&gt;官方迁移建议中特别提到，要对比 3.5.x 与 4.0.x 的 dependency management，并重点检查&lt;strong&gt;非 Boot 管理的依赖&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;这在真实项目里非常关键。因为很多升级失败案例并不是 Spring Boot 本身出问题，而是下面这些组件没有及时跟上：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Spring Cloud 对应版本；&lt;/li&gt;
&lt;li&gt;第三方 starter；&lt;/li&gt;
&lt;li&gt;安全、监控、消息队列等中间件整合包；&lt;/li&gt;
&lt;li&gt;自定义 BOM；&lt;/li&gt;
&lt;li&gt;直接锁定版本的 Jakarta / servlet 生态库。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以在升级方案上，最稳妥的方式是把“依赖兼容性核查”当作单独工作项来做，而不是在 CI 报错后再被动补救。&lt;/p&gt;
&lt;h2 id="一条更稳妥的-spring-boot-40-升级路径"&gt;&lt;a href="#%e4%b8%80%e6%9d%a1%e6%9b%b4%e7%a8%b3%e5%a6%a5%e7%9a%84-spring-boot-40-%e5%8d%87%e7%ba%a7%e8%b7%af%e5%be%84" class="header-anchor"&gt;&lt;/a&gt;一条更稳妥的 Spring Boot 4.0 升级路径
&lt;/h2&gt;&lt;p&gt;如果你准备在生产项目中升级到 Spring Boot 4.0，可以参考下面这条更稳妥的路径：&lt;/p&gt;
&lt;h3 id="第一步先把项目升级到最新-spring-boot-35x"&gt;&lt;a href="#%e7%ac%ac%e4%b8%80%e6%ad%a5%e5%85%88%e6%8a%8a%e9%a1%b9%e7%9b%ae%e5%8d%87%e7%ba%a7%e5%88%b0%e6%9c%80%e6%96%b0-spring-boot-35x" class="header-anchor"&gt;&lt;/a&gt;第一步：先把项目升级到最新 Spring Boot 3.5.x
&lt;/h3&gt;&lt;p&gt;这样做的目的不是浪费时间，而是先把 3.x 线上的兼容问题清干净，降低跨代升级风险。&lt;/p&gt;
&lt;h3 id="第二步清理所有已知-deprecated-api-与配置"&gt;&lt;a href="#%e7%ac%ac%e4%ba%8c%e6%ad%a5%e6%b8%85%e7%90%86%e6%89%80%e6%9c%89%e5%b7%b2%e7%9f%a5-deprecated-api-%e4%b8%8e%e9%85%8d%e7%bd%ae" class="header-anchor"&gt;&lt;/a&gt;第二步：清理所有已知 deprecated API 与配置
&lt;/h3&gt;&lt;p&gt;重点排查：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;启动日志中的 deprecated 提示；&lt;/li&gt;
&lt;li&gt;配置文件中的旧属性；&lt;/li&gt;
&lt;li&gt;自定义 starter 或公共组件里的旧用法。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="第三步确认技术基线满足-40-要求"&gt;&lt;a href="#%e7%ac%ac%e4%b8%89%e6%ad%a5%e7%a1%ae%e8%ae%a4%e6%8a%80%e6%9c%af%e5%9f%ba%e7%ba%bf%e6%bb%a1%e8%b6%b3-40-%e8%a6%81%e6%b1%82" class="header-anchor"&gt;&lt;/a&gt;第三步：确认技术基线满足 4.0 要求
&lt;/h3&gt;&lt;p&gt;至少要确认：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;JDK 是否已到 17+；&lt;/li&gt;
&lt;li&gt;Kotlin / GraalVM 是否需要同步升级；&lt;/li&gt;
&lt;li&gt;容器是否使用 Undertow；&lt;/li&gt;
&lt;li&gt;是否依赖老 Servlet 规范。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="第四步核查外围依赖与-spring-framework-7--boot-4-的兼容性"&gt;&lt;a href="#%e7%ac%ac%e5%9b%9b%e6%ad%a5%e6%a0%b8%e6%9f%a5%e5%a4%96%e5%9b%b4%e4%be%9d%e8%b5%96%e4%b8%8e-spring-framework-7--boot-4-%e7%9a%84%e5%85%bc%e5%ae%b9%e6%80%a7" class="header-anchor"&gt;&lt;/a&gt;第四步：核查外围依赖与 Spring Framework 7 / Boot 4 的兼容性
&lt;/h3&gt;&lt;p&gt;这一步尤其适合通过依赖树、BOM 对比、第三方 starter 发布说明来完成。&lt;/p&gt;
&lt;h3 id="第五步必要时临时引入-spring-boot-properties-migrator"&gt;&lt;a href="#%e7%ac%ac%e4%ba%94%e6%ad%a5%e5%bf%85%e8%a6%81%e6%97%b6%e4%b8%b4%e6%97%b6%e5%bc%95%e5%85%a5-spring-boot-properties-migrator" class="header-anchor"&gt;&lt;/a&gt;第五步：必要时临时引入 &lt;code&gt;spring-boot-properties-migrator&lt;/code&gt;
&lt;/h3&gt;&lt;p&gt;把它当作迁移辅助，而不是长期依赖。&lt;/p&gt;
&lt;h3 id="第六步做完整的回归验证"&gt;&lt;a href="#%e7%ac%ac%e5%85%ad%e6%ad%a5%e5%81%9a%e5%ae%8c%e6%95%b4%e7%9a%84%e5%9b%9e%e5%bd%92%e9%aa%8c%e8%af%81" class="header-anchor"&gt;&lt;/a&gt;第六步：做完整的回归验证
&lt;/h3&gt;&lt;p&gt;需要重点回归的通常包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Web 层接口兼容性；&lt;/li&gt;
&lt;li&gt;安全配置；&lt;/li&gt;
&lt;li&gt;配置绑定；&lt;/li&gt;
&lt;li&gt;任务调度 / 异步执行；&lt;/li&gt;
&lt;li&gt;消息队列集成；&lt;/li&gt;
&lt;li&gt;监控与链路追踪；&lt;/li&gt;
&lt;li&gt;原生镜像构建（如果你在用）。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="spring-boot-40-值不值得升"&gt;&lt;a href="#spring-boot-40-%e5%80%bc%e4%b8%8d%e5%80%bc%e5%be%97%e5%8d%87" class="header-anchor"&gt;&lt;/a&gt;Spring Boot 4.0 值不值得升
&lt;/h2&gt;&lt;p&gt;如果你的项目还处于以下状态：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;仍在 Java 11 或更老版本；&lt;/li&gt;
&lt;li&gt;依赖大量历史包袱；&lt;/li&gt;
&lt;li&gt;使用 Undertow 且短期不愿迁移；&lt;/li&gt;
&lt;li&gt;对升级窗口极度敏感；&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;那么短期内不一定适合马上升级到 4.0。&lt;/p&gt;
&lt;p&gt;但如果你的项目已经：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;运行在 Java 17+；&lt;/li&gt;
&lt;li&gt;对可观测性、声明式 HTTP 客户端、API 版本治理等能力有明确需求；&lt;/li&gt;
&lt;li&gt;希望尽早跟上 Spring Framework 7 的长期演进路线；&lt;/li&gt;
&lt;li&gt;愿意安排一次成体系的升级与回归；&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;那么 Spring Boot 4.0 是值得认真评估并纳入计划的。&lt;/p&gt;
&lt;p&gt;它的意义不只是“版本更高了”，而是它开始把 Spring Boot 带到一个更现代的工程基线上：更清晰的模块边界、更明确的技术底座、更统一的可观测性与 API 治理能力，以及对新一代 Java 的更完整支持。&lt;/p&gt;
&lt;h2 id="总结"&gt;&lt;a href="#%e6%80%bb%e7%bb%93" class="header-anchor"&gt;&lt;/a&gt;总结
&lt;/h2&gt;&lt;p&gt;Spring Boot 4.0 的核心价值可以概括为三点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;它是基于 Spring Framework 7 的代际升级&lt;/strong&gt;；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;它在工程能力上继续向现代化靠拢&lt;/strong&gt;，尤其是 HTTP Service Clients、API Versioning、OpenTelemetry 与任务装饰能力；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;它的升级成本主要来自底层基线提升与旧能力移除&lt;/strong&gt;，尤其是 Undertow 支持下线、Java/Servlet/Jakarta 体系全面抬升。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对团队来说，最好的做法不是盲目追新，也不是长期停留在旧版本，而是根据自己的技术债水平与业务窗口期，选择一个可控的节奏完成升级。&lt;/p&gt;
&lt;p&gt;如果你的项目准备迈向 Spring Boot 4.0，最稳妥的关键词只有一个：&lt;strong&gt;先把基础清干净，再升级。&lt;/strong&gt;&lt;/p&gt;</description></item></channel></rss>