SpringBoot 4.2 RC发布

Spring 官方正式推送了 Spring Boot 4.2.0-RC1。作为 4.2 分支首个发布候选版本,它包含了 113 项功能增强、文档修复和依赖升级,意味着整个版本的功能特性已经基本冻结,正式发版已进入倒计时。

跟随底层 Spring Framework 7.1 的演进节奏,Spring Boot 4.2 对一些大家习惯用了十几年的老组件按下了终止符,同时重构了消息模块与容器配置的目录结构。如果不提前摸清这些破坏性变更,盲目升级很可能直接导致项目编译失败或启动报错。

RestTemplate 退役,换用 RestClient

这次改动中影响面最广、波及代码最多的,莫过于 RestTemplate 的退役。

随着 Spring Framework 7.1 正式将 RestTemplate 标记为弃用待移除(deprecated for removal),Spring Boot 4.2 同步废弃了围绕它的整套自动配置基础设施。包括 RestTemplateAutoConfiguration、RestTemplateBuilder、RestTemplateCustomizer 以及针对测试的 MockServerRestTemplateCustomizer 均已全线标记废弃。在 Spring Boot 4.2 的官方参考文档中,调用 REST 服务章节已经完全剔除了 RestTemplate 的相关内容。

与此配套,测试端的 TestRestTemplate 同样被废弃。官方给出的标准替代方案是 RestTestClient。在测试类上声明 @AutoConfigureRestTestClient 注解后,即可直接注入 RestTestClient,无论是针对模拟环境还是真实 HTTP 服务,都能提供内置断言和一致的流式调用体验。

对于生产端业务代码,迁移路径非常清晰:直接换用 RestClient。应用应当将原先注入的 RestTemplateBuilder 替换为 RestClient.Builder,配置定制则迁移至 RestClientCustomizer。相比传统 RestTemplate 冗长且重载繁复的 API,RestClient 提供了清晰的链式语法和更现代的错误处理机制,尽早完成迁移能避免后续大版本彻底移除时手忙脚乱。

AMQP 拆包

除了 HTTP 客户端,消息队列和内嵌容器的配置调整同样需要重点关注。

首先是 AMQP 模块的分化。Spring Boot 4.2 正式引入了对 AMQP 1.0 的全面支持,不仅集成了通用的 QPid Proton 协议栈,还提供了针对 RabbitMQ 的专用实现。因此,原有的通用 starter spring-boot-starter-amqp 发生重构:如果你的业务系统继续依赖老旧的 AMQP 0.9 协议,升级后需要显式将依赖切换为 spring-boot-starter-rabbitmq;若计划接入现代化的 AMQP 1.0 规范,则需要引入 spring-boot-starter-amqp-rabbitmq。依赖如果不做调整,项目在依赖解析或构建时将出现异常。

Tomcat 配置收紧

其次是内嵌 Tomcat 属性的归集与默认行为变更。所有与 Servlet 相关的 Tomcat 配置,在 4.2 中统一收敛到了 server.tomcat.servlet.* 命名空间下。例如以往常用的 server.tomcat.redirect-context-root 和 server.tomcat.additional-tld-skip-patterns,均需迁移至对应的新前缀。此外,server.tomcat.servlet.use-relative-redirects 的默认值直接变为了 true,以对齐 Tomcat 原生行为。如果你的代理网关依赖绝对重定向跳转,务必在升级时检查这项设置,避免产生意外的重定向异常。

启动加速

避开了前期的改动暗礁,Spring Boot 4.2 带来的性能和运维红利同样非常亮眼。

最核心的改进在于可执行 jar(executable jar)的启动性能优化。在过去,嵌套 jar 在每次进行类加载或资源查找时,底层都会重复开启 URL 连接,造成显著的 I/O 与内存开销。而在 4.2 中,底层检索逻辑改为直接在嵌套 jar 内部进行精确查找,不仅明显削减了大型微服务的类加载耗时,更显著降低了启动瞬时的堆内存分配峰值。

在构建与可观测性方面,升级同样不少:

Cloud Native Buildpacks 构建 OCI 镜像的默认 builder 正式切换为基于 Ubuntu 26.04 的 paketobuildpacks/ubuntu-resolute-builder;

辅助升级利器 spring-boot-properties-migrator 新增配置项,支持在检测到废弃属性警告或错误时直接阻断应用启动,方便在本地和测试流水线中强行拦截历史包袱;

OpenTelemetry 的 OTLP 导出配置收敛到 management.opentelemetry.otlp 统一命名空间下,同时 MDC 中的 traceId 和 spanId 键名已开放自由配置,避免了多套监控组件日志串联时的格式冲突。