Java基础、中级、高级、架构面试资料

Spring 7.0.3 重磅发布,65 项更新、新增测试上下文智能暂停机制

JAVA herman 9浏览
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:xttblog2,发送下载链接帮助你免费下载!
本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领
腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云

距离上次写 Spring 7 的内容,差不多有一个月了,今天我去看了一下 Spring 的官网,发现 Spring Framework 7.0.3 已经正式发布了。这个版本,把内置的容错能力增强了,关键的死锁 Bug 也彻底的修复了。

作为 7.x 主线的重要维护版本,这次更新带来了65 项修复和文档改进,并随 Spring Boot 4.0.2 一同发布(Spring Boot 4.0.2 上周我已经写过了,参考《https://mp.weixin.qq.com/s/A1hfO5-MJmVYHg-iBh5UXg》)。

值得注意的是,这次的 7.0.3 不仅修复了之前版本中困扰开发者的ConcurrentReferenceHashMap 死锁问题,还进一步完善了 7.0 版本引入的内置容错(Resilience)特性。下面业余草就为大家解读一下这个版本更新的大致内容吧。

三大核心更新解读

测试上下文智能暂停机制

测试上下文智能暂停机制Test Context Pausing是 7.0.3 最值得关注的变更。框架现在会对未使用的测试ApplicationContext 实施延迟暂停策略,首次使用不同上下文时触发。

配置方式如下所示。

# 方案 1:智能懒暂停(默认,推荐)
spring.test.context.cache.pause=LAZY
# 行为:当前上下文用完后,只有遇到不同配置时才暂停它

# 方案 2:立即暂停(激进省内存)
spring.test.context.cache.pause=ALWAYS  
# 行为:每个测试类跑完立即暂停,哪怕下一个测试用相同配置也要唤醒

# 方案 3:禁用(兼容旧行为)
spring.test.context.cache.pause=NEVER
# 行为:像旧版本一样,上下文一直活跃直到被驱逐

这项优化显著降低了内存占用,特别是在大型多模块项目中,能有效避免测试进程因上下文堆积导致的 OOM。

说白了,这个机制解决的是“顺序执行时的上下文复用效率”。

内置容错能力持续完善

Spring 7.0 将原本独立的 spring-retry 模块集成到核心框架,7.0.3 进一步增强了该功能。

  • @Retryable 增强:新增监听器注册支持,可追踪重试触发事件
  • @ConcurrencyLimit 优化:新增拒绝异常抛出选项,避免线程无限堆积
  • SyncTaskExecutor 并发控制:新增任务拒绝支持,配合并发限制使用更安全

简单使用示例如下所示。

@Service
public class OrderService {

    @Retryable(
        retryFor = {RestClientException.class},
        maxAttempts = 3,
        backoff = @Backoff(delay = 1000)
    )
    public Order createOrder(OrderRequest request) {
        // 调用外部支付接口
        return restClient.postForObject("/orders", request, Order.class);
    }

    @ConcurrencyLimit(maxConcurrent = 10, reject = true)
    public void processPayment(Payment payment) {
        // 严格限制并发数,超限立即抛异常
    }
}

API 版本控制体验优化

针对 7.0 引入的 API 版本控制功能,7.0.3 修复了无版本号时静态资源加载失败的关键问题(#36059、#36058)。

  • 修复了DefaultApiVersionInserter的双重编码问题(#36097)
  • 允许WebFlux ApiVersionResolver返回 Mono(#36084)
  • 优化单字符通配符路径匹配性能(#36095)

简单来说,7.0.3 之前,开了 API 版本控制就像给整个应用加了一道“版本门”,没贴版本标签的请求(静态资源、错误页面)都被拒之门外。7.0.3 给这道门加了“贵宾通道”,让不该被版本控制的资源正常通行。

重点 Bug 修复:死锁问题彻底解决

Spring 7.0.3 修复了 17 个 Bug,其中最重要的是延续了 7.0.2 对ConcurrentReferenceHashMap死锁问题的修复。

也就是说,https://mp.weixin.qq.com/s/ELbKnj3HFvf87uYlsTCfWg 中的这个问题,虽然已经在 7.0.2 中得到了修复。在 7.0.3 版本中,进一步的修复了相关的类型匹配和属性描述符问题。比如,修复了#36123 SmartFactoryBean类型匹配问题;正确处理 ResolvableType.NONE 避免类型推断错误导致的重复创建尝试;修复#36113 和 #36019 PropertyDescriptorUtils 可靠性问题等,彻底消除类似隐患。

其他重要变更

新特性亮点方面:

  • HTTP 服务接口增强:支持属性占位符(#36126),@RequestBody Object 参数将使用实际值类型(#36078)
  • Jackson XML 编解码器:原生支持 Jackson XML 处理(#35752)
  • HttpComponents 5.6 支持:升级至最新 HTTP 客户端(#36100)
  • 空安全改进:更新至 NullAway 0.12.15,修复大量潜在 NPE 风险(#36054)

其它的一些关键修复,如下所示。

  • WiretapConnector 数据缓冲区泄漏修复(#36050)
  • UriComponentsBuilder 单字符片段丢失问题(#36029)
  • 方法参数名在首次调用时为空的问题(#36024)
  • Hibernate Validator 9 模块化路径反射警告(#36012)

其余的,PagedListHolderPropertyComparator 这两个类已标记为废弃,将在未来版本移除(#36139)。

总结

Spring Framework 7.0.3 是一个高质量的生产级维护版本,不仅彻底解决了早期版本的死锁隐患,还通过测试上下文智能暂停机制显著提升了开发体验。内置的 @Retryable@ConcurrencyLimit 注解让分布式系统的容错设计变得更加简洁优雅。

对于已经在使用 Spring 7.x 的团队,建议尽快升级至 7.0.3;对于仍在 6.x 观望的开发者,随着生态(Spring Boot 4.0、Spring Security 7.0、Spring Data 2025.1 等)的全面成熟,升级时机已然成熟。

总的来说,Spring 7.0.3 还是小修小补吧。对于 Spring 7.x 来说,越来越稳定了。

参考资料

  • https://github.com/spring-projects/spring-framework/releases/tag/v7.0.3
  • https://spring.io/blog/2026/01/15/spring-framework-7-0-3-available-now
  • https://mp.weixin.qq.com/s/ELbKnj3HFvf87uYlsTCfWg
  • https://mp.weixin.qq.com/s/A1hfO5-MJmVYHg-iBh5UXg

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号:xttblog2。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!

本文原文出处:业余草: » Spring 7.0.3 重磅发布,65 项更新、新增测试上下文智能暂停机制