找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

3582

积分

0

好友

498

主题
发表于 11 小时前 | 查看: 0| 回复: 0

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

Spring Boot v4.0.3 更新日志截图

新增特性:前瞻性支持 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 不被加载。
  • 日期序列化格式与预期不符。
  • 空值处理策略失效,可能引发请求错误。

问题的根源在于 RestClientAutoConfigurationHttpMessageConvertersAutoConfiguration 的自动配置顺序冲突,导致客户端 JsonMapper 未能继承应用级别的全局 Jackson 配置。修复后,确保了 HttpMessageConvertersRestClients 之前初始化。如果你在项目中使用 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

技术演进永无止境,保持对社区动态的关注是后端开发者持续精进的重要方式。希望本文对你有帮助。




上一篇:Go并发超时控制:从context与sync源码到生产级实践
下一篇:OpenClaw自动发布网站SEO升级?我的Agent失控亲历记
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-2-26 16:43 , Processed in 1.520375 second(s), 46 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表