springboot4.0 已经正式发布,本文旨在梳理 Spring Boot 4.0 的"新增与变化点",聚焦对工程落地有直接影响的内容。
一、重点特性升级
1. 平台基线升级:对齐 Spring Framework 7 与 Servlet 6.1 / Jakarta EE 11
Spring Boot 4.0 的首要变化是平台基线整体前移:
- Spring Framework 基线升级到 7.0.x
- Servlet 基线升级到 6.1(Jakarta EE 11)
- 内嵌容器主线对齐到 Tomcat 11 / Jetty 12.1(与 Servlet 6.1 匹配)
影响:
- 任何与
jakarta.*、Servlet API、容器适配相关的依赖,需要升级到兼容 Servlet 6.1 的版本线 - 自定义 Filter/Servlet、以及第三方组件(网关插件、监控探针、老旧 SDK)需要回归验证
2. Starter 结构调整:Web 服务器从"隐式默认"变成"显式可插拔"
Boot 4.0 对 Web 服务器 starter 做了结构性调整:
-
spring-boot-starter-web/spring-boot-starter-webflux不再隐式绑定某个服务器实现 -
新增更清晰的容器 starter(按 Servlet / Reactive 维度区分):
spring-boot-starter-web-server-tomcatspring-boot-starter-web-server-jettyspring-boot-starter-reactive-web-server-tomcatspring-boot-starter-reactive-web-server-jetty
影响:
- 需要明确选择容器实现(Tomcat 或 Jetty),依赖图更清晰、更可控
- 对"平台统一容器版本"的团队更友好(便于强制收敛)
3. Undertow 移除:Servlet 6.1 兼容性导致的硬性变化
Boot 4.0 移除了 Undertow 的内嵌支持,原因是 Undertow 目前不支持 Servlet 6.1。
工程影响:
- 依赖 Undertow 的项目需要迁移到 Tomcat 或 Jetty
- 如果团队强依赖 Undertow(性能、特性、生态),需要评估自行维护适配链路的成本(通常不建议)
4. API Versioning:框架内建的版本治理能力
Boot 4.0 把 API 版本治理提升为框架能力(不再只是网关约定或自研技巧):
- 支持在 Spring MVC / WebFlux 中声明与解析版本
- 支持默认版本、版本解析器、版本格式解析、废弃策略处理等扩展点
4.1 Header 取版本(示例)
properties
spring.mvc.apiversion.default=1.0.0
spring.mvc.apiversion.use.header=X-Version
4.2 Controller 上声明版本(示意)
具体注解/扩展点以 Spring Boot 4.0 最终 API 为准;实际项目建议统一版本策略(Header/Path/Query 选其一)。
java
@GetMapping("/users")
@ApiVersion("1.0.0")
public List<UserDTO> v1() { ... }
@GetMapping("/users")
@ApiVersion("2.0.0")
public List<UserDTO> v2() { ... }
建议:
- 对外 API/开放平台建议尽早统一版本来源(Header 或 Path),避免"网关一套、应用一套"
- 版本废弃需要配套:文档标注、灰度周期、监控(旧版本调用量)、以及下线策略
5. 声明式 HTTP Client:HTTP Service Clients 一等公民化
Boot 4.0 强化了"接口式 HTTP Client"的工程化体验:
- 通过注解接口描述外部服务契约(而不是手工拼 URL)
- 支持按组配置
base-url、拦截器、超时等 - 适合多环境、多域名、微服务间调用治理
5.1 定义接口(示例)
java
@HttpExchange
public interface BillingClient {
@GetExchange("/api/bills/{id}")
BillDTO get(@PathVariable Long id);
}
5.2 扫描导入
java
@SpringBootApplication
@ImportHttpServices(basePackages = "com.example.clients")
public class App { }
5.3 按组配置 base-url(示例)
properties
spring.http.serviceclient.billing.base-url=https://billing.example.com
建议:
- 对外部依赖调用必须配套:超时、重试、熔断、限流与降级(建议与 Resilience4j 等组合)
- 调用链路建议统一透传 traceId,以便端到端排障
6. 可观测性:OpenTelemetry Starter 纳入官方阵列
Boot 4.0 新增 spring-boot-starter-opentelemetry,用于更标准地接入 OpenTelemetry 相关能力。
工程建议:
- 统一团队的 tracing/metrics/logs 采集入口,避免各服务"各配各的"
- 与 Actuator、日志(MDC/traceId)、以及 OTLP exporter 等形成一致的观测口径
7. Kotlin 生态:Kotlin Serialization Starter
Boot 4.0 新增 spring-boot-starter-kotlin-serialization,为 Kotlin 项目提供更明确的序列化路径。
8. 测试与客户端工具:RestTestClient、JmsClient 等进入标准工具箱
Boot 4.0 与 Spring Framework 7 同步推动部分现代客户端能力:
RestTestClient:更适合 REST 交互测试的工具能力JmsClient:更现代化的 JMS 客户端入口
9. 关键依赖代际升级:Jackson 3 / Hibernate 7.1 / Spring Data 2026 等
Boot 4.0 的"新特性"很大一部分来自关键依赖的大代际升级:
- Jackson 3.x
- Hibernate 7.1
- Spring Data 2026
- Spring Batch 6.0
影响(必须回归验证):
- JSON 序列化行为与模块兼容(尤其是自定义序列化、时间类型、泛型/多态)
- JPA/Hibernate 配置项、方言行为、DDL 生成、懒加载与性能策略
- Spring Data Repository 行为变化与依赖矩阵变化
- 第三方 starter/SDK 的兼容窗口(建议建立依赖兼容清单)
二、. Boot 4.0 vs Boot 3.x:升级关注点对比
建议升级路径:先收敛到最新的 Boot 3.5.x,再评估升到 4.0。
| 维度 | Boot 3.x | Boot 4.0 |
|---|---|---|
| Spring Framework 基线 | 6.x | 7.0.x |
| Servlet/Jakarta 基线 | Servlet 6.0 / Jakarta EE 10(主线) | Servlet 6.1 / Jakarta EE 11 |
| Web starter 结构 | starter-web 默认绑定容器的习惯更明显 | Web 服务器 starter 显式拆分,更可插拔 |
| Undertow | 常见可用选择之一 | 移除(Servlet 6.1 不支持) |
| API 版本治理 | 多靠网关/自研 | 框架级 API Versioning |
| HTTP 调用方式 | RestTemplate/WebClient + 手写封装 | 声明式 HTTP Service Clients + 分组配置 |
| 可观测性 | OTel 依赖通常手动组合 | 新增 OTel starter,标准化更强 |
| 关键依赖代际 | Jackson 2 / Hibernate 6 等 | Jackson 3 / Hibernate 7.1 / Spring Data 2026 等 |
三、. 升级落地建议
- 先到 3.5.x 再升 4.0:减少迁移跨度
- 先清理 deprecated:避免升级后集中爆炸
- 先补齐测试与观测基线:没有测试/指标就无法判断升级收益
- 重点回归:容器/Servlet、序列化、JPA/Hibernate、Actuator 端点与安全策略
- 灰度发布 + 回滚预案:按"升级项目"推进,而不是"改版本号"
四、总结
本文介绍了springboot4.0升级的重点内容,及项目升级建议。