上周,Spring Boot 团队正式发布了 4.0.3 版本。这个维护版本虽然没有引入重磅新功能,但解决了一系列棘手的Bug,其中最值得关注的是修复了一个关键的Jackson属性配置丢失问题。同时,框架也提前为尚未正式发布的JDK 26做好了准备。

新增特性:前瞻性支持 Java 26
本次更新唯一的新特性,是 JavaVersion 枚举中增加了对 TWENTY_SIX 常量的支持。虽然 Java 26 仍处于早期预览阶段,但 Spring Boot 的提前适配为未来的版本升级铺平了道路,体现了框架的演进规划。
// JavaVersion 枚举新增 TWENTY_SIX 常量
public enum JavaVersion {
// ... 其他版本
TWENTY_SIX // #49193 新增
}
关键 Bug 修复:避免项目踩坑
1. Jackson 属性未正确应用到 RestClient
这是 4.0.3 版本中最重要的修复,对应 issue #49223。问题表现为,在 application.properties 中配置的 Jackson 全局属性,在使用 RestClient 时不会生效。
例如,以下配置可能失效:
# 应用配置
spring.jackson.deserialization.fail-on-null-for-primitives=false
spring.jackson.serialization.write-dates-as-timestamps=false
这会导致一系列问题:
- 自定义的
StdDeserializer 或 @JacksonComponent 不被加载。
- 日期序列化格式与预期不符。
- 空值处理策略失效,可能引发请求错误。
问题的根源在于 RestClientAutoConfiguration 与 HttpMessageConvertersAutoConfiguration 的自动配置顺序冲突,导致客户端 JsonMapper 未能继承应用级别的全局 Jackson 配置。修复后,确保了 HttpMessageConverters 在 RestClients 之前初始化。如果你在项目中使用 RestClient 并依赖自定义Jackson配置,强烈建议升级至 4.0.3 版本。
2. Actuator 类加载异常
当项目中仅引入 spring-boot-starter-actuator 但未包含 spring-boot-starter-health 时,程序启动会抛出 ClassNotFoundException。此问题(#49196)已通过优化 Actuator 模块的可选依赖处理逻辑得到修复。
3. OTel 与 Zipkin 配置冲突
当同时使用 spring-boot-starter-observation (OpenTelemetry) 和 spring-boot-starter-zipkin 时,两者自动生成的追踪配置会发生冲突,产生无效的 YAML(#49183)。本次更新调整了配置合并逻辑,确保了追踪端点的正确注册。
4. 虚拟线程下 Jetty 最大线程数配置失效
在启用虚拟线程时,server.jetty.threads.max 配置项会被忽略(#48989)。这与此前修复的虚拟线程开关问题不同,本次专门修正了线程池的最大值上限配置,确保 Jetty 与虚拟线程的集成逻辑正确。
# 使用虚拟线程时,此配置在4.0.3之前被忽略
server.jetty.threads.max=200
5. Windows 下 Docker 凭证助手执行失败
在 Windows 系统上,带有文件扩展名的 Docker 凭证助手(如 docker-credential-desktop.exe)无法被正确执行(#48979)。修复方案是优化了命令执行逻辑,使其能够兼容 Windows 的路径解析规则。
文档改进亮点
除了代码修复,官方文档也进行了一系列修正和澄清:
- 修正误导信息:明确了 Couchbase 和 Kafka 在 Docker Compose 中支持 SSL 的说明。
- 补充用法说明:文档现在包含了
@Value 注解在使用非标准环境变量格式(如 MY_VAR 对应 my.var)时的行为说明。
- 强调最佳实践:在 Kubernetes 探针配置部分,特别强调了
preStop 钩子对于实现应用优雅下线的重要性。
- 澄清技术路线图:官方文档说明,对 Jackson 3 的支持将至少推迟到 Spring Boot 4.3 版本,当前版本仍以 Jackson 2 为核心。
核心依赖同步升级
Spring Boot 4.0.3 也同步升级了其核心依赖的版本,这些升级大多侧重于稳定性修复和性能优化。
| 依赖 |
升级版本 |
说明 |
| Spring Framework |
7.0.5 |
核心框架稳定性修复 |
| Spring Security |
7.0.3 |
OAuth2 / JWT 相关修复 |
| Tomcat |
11.0.18 |
HTTP/3 优化 + 安全补丁 |
| Jetty |
12.1.6 |
虚拟线程兼容性增强 |
| Micrometer |
1.16.3 |
指标采集性能优化 |
| Logback |
1.5.32 |
异步日志内存泄漏修复 |
| PostgreSQL Driver |
42.7.10 |
连接池稳定性提升 |
| JUnit Jupiter |
6.0.3 |
测试框架新特性支持 |
重要提示:本次升级属于小版本迭代,未引入破坏性变更。因此,正在使用 Spring Boot 4.0.x 系列的项目可以平滑升级至 4.0.3。
如何升级到 4.0.3
升级过程非常简单,通常只需三步:
第一步:更新项目依赖版本
以 Maven 为例,修改父 POM 的版本号:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>4.0.3</version>
</parent>
第二步:验证关键修复是否生效
建议重点测试 RestClient 的 Jackson 序列化/反序列化行为是否符合预期:
// 检查 RestClient 的 Jackson 配置是否生效
@Bean
public RestClient restClient(RestClient.Builder builder) {
return builder
.baseUrl("https://api.example.com")
.build();
}
// 测试请求
@Test
void testJacksonConfig() {
var result = restClient.get()
.uri("/test")
.retrieve()
.body(MyDto.class);
// 验证日期格式、空值处理等是否符合 application.properties 中的配置
}
第三步:进行必要的回归测试
升级后,建议对以下方面进行重点验证:
- HTTP 客户端(尤其是
RestClient)的序列化逻辑。
- Actuator 监控端点的可访问性。
- 监控指标(通过 Micrometer 上报)是否正常。
总结与获取更多信息
Spring Boot 4.0.3 是一个以修复和稳定为核心的维护版本。它解决了几个在生产环境中可能遇到的棘手问题,特别是 Jackson 配置回归和虚拟线程相关的 Bug。对于追求稳定性的项目而言,及时升级是明智的选择。
更多详细信息,你可以参考:
- 官方博客公告:
https://spring.io/blog/2026/02/19/spring-boot-4-0-3-available-now
- GitHub Release 页面:
https://github.com/spring-projects/spring-boot/releases/tag/v4.0.3
- Spring Boot 4.0 迁移指南:
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-4.0-Migration-Guide
技术演进永无止境,保持对社区动态的关注是后端开发者持续精进的重要方式。希望本文对你有帮助。