<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Java 17 on 吾爱主机</title><link>https://blog.waihost.com/tags/java-17/</link><description>Recent content in Java 17 on 吾爱主机</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Mon, 29 Jun 2026 14:40:54 +0000</lastBuildDate><atom:link href="https://blog.waihost.com/tags/java-17/index.xml" rel="self" type="application/rss+xml"/><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>