写点什么

Spring Framework 7 和 Spring Boot 4 引入 API 版本控制、韧性和 Null-Safe 注解

作者:Karsten Silz

  • 2025-11-25
    北京
  • 本文字数:2721 字

    阅读完需:约 9 分钟

大小:1.34M时长:07:47
Spring Framework 7和Spring Boot 4引入API版本控制、韧性和Null-Safe注解

Broadcom 在 2025 年 11 月发布了Spring Framework 7.0(参见版本发布的博客文章)和Spring Boot 4.0(参加版本发布的博客文章)。新一代的版本推出了一流的 REST API 版本控制、基于 JSpecify 注解实现 Spring 产品组合中标准化的空值安全、内置的韧性功能(如重试和并发限制)。Spring Boot 4 迁移到了 Jackson 3 进行 JSON 处理,并将单体的自动化配置 JAR 拆分成了多个模块。Spring Framework 7 保持 JDK 17 作为基线,同时支持JDK 25,同时采用 Jakarta EE 11 和 Kotlin 2.2 作为新的基线。

 

现在,新的API版本控制功能在 Spring MVC 和 Spring WebFlux 中均已可用。框架支持基于路径、头信息、查询参数和媒体类型的版本控制策略。控制器通过ApiVersionStrategy进行配置,并在映射上直接声明版本,例如:

@GetMapping(url = "/accounts/{id}", version = "1.1"
复制代码

 

它们还具备符合 RFC 9745 规范的内置弃用处理功能。RestClientWebClient和 HTTP 接口客户端使用了 ApiVersionInserter,非反应式的RestTestClient(7.0 中新加入)和WebTestClient也是如此。ApiVersionStrategyApiVersionInserter都是 Spring Framework 的一部分,可供所有在 Spring 上运行的库和应用程序使用。

 

Spring Framework 7 完成了向标准化JSpecify注解的迁移,以实现 Spring 产品组合中的空值安全性。JSpecify联盟包括 OpenJDK、Broadcom、Google、JetBrains 和 Sonar。@Nullable@NonNull注解适用于标准和泛型类型、数组和可变参数元素。Kotlin 2 会自动将 JSpecify 注解转换为 Kotlin 的 nullability。IntelliJ IDEA 2025.3 通过全面覆盖提供了一流的支持,包括复杂的数据流分析。NullAway项目的构建期检查至少需要 JDK 21,不过对 JDK 17 的支持可能会提供。

 

Spring Retry中的韧性特性已经转移到了 Spring Framework 7 中。@Retryable注解提供了声明式重试支持,它能自动适应反应式方法、指数退避(back-off)和抖动。@ConcurrencyLimit注解启用了声明式并发控制,特别是与虚拟线程一起使用时非常有价值。

 

Jackson 3 主要的破坏性变更是包的迁移,从 com.fasterxml.jackson 迁移到了 tools.jackson。现在推荐的 JSON 映射器是JsonMapper,它取代了ObjectMapper并提供了不可变性和特定格式的映射器。默认的序列化行为变更将MapperFeature.SORT_PROPERTIES_ALPHABETICALLY设置为trueDateTimeFeature.WRITE_DATES_AS_TIMESTAMPS设置为false,这将日期序列化为 ISO-8601 字符串。应用程序仍然可以使用已弃用的 Jackson 2,甚至可以同时使用 Jackson 2 和 3。

 

Spring Boot 4 将自动化配置进行了模块化:增加了许多特定技术的模块,如spring-boot-starter-webmvcspring-boot-starter-webmvc-test,取代了原来的两个单体spring-boot-autoconfigurespring-boot-test-autoconfigure JAR。这减少了应用程序占用的空间,并防止 IDE 自动完成建议未使用的类或配置属性。

 

新版本保持了原有的 JDK 17 基线,正如 Spring Framework 项目负责人Juergen Hoeller在 2024 年 11 月告诉InfoQ的那样,这是因为“当前的行业共识显然是围绕 Java 17 基线的”。但 Spring 拥抱了 JDK 25 及其所有的特性。Jakarta EE 基线从版本 9 升级到了版本11。这带来了 Jakarta Servlet 6.1、Jakarta WebSocket 2.2、Jakarta Validation 3.1 和 Jakarta Persistence 3.2。它还提供了对 Hibernate ORM 7.1 的支持,该版本不再允许分离的实体重新与持久化上下文关联。Spring Boot 4 目前不支持 Undertow Web 服务器,因为它与 Jakarta Servlet 6.1 还不兼容。

 

新的HTTP接口组(HTTP Interface Groups)允许应用程序一次配置多个 HTTP 接口客户端,并让它们共享同一个RestClient。Spring Framework 7.1(预计在 2026 年 11 月)将弃用RestTemplate类,转而支持RestClient接口,而 Spring Framework 8(日期待定)将移除RestTemplateHTTP服务客户端(HTTP Service Client)的增强包括新的HttpServiceProxyRegistry接口(作为HttpServiceProxyFactory类之上新的一层),以及使用HttpServiceGroupConfigurer bean 方法为 HTTP 服务组配置 HTTP 客户端的能力。HttpStatus类现在包含了新的HTTP状态代码

 

其他改进包括:Spring Boot 4 支持 Gradle 9;Spring Security 7支持了多要素认证;Kotlin Serialization 的改进,包括一个新的spring-boot-kotlin-serialization模块和相应的spring-boot-kotlin-serialization-starter;提供了一个流畅的JmsClient;Spring for Apache Kafka 4.0 为 Kafka 队列增加了Share Consumer支持,这可以在一个组中的多个消费者之间分配记录,而传统上每个分区属于单个消费者;任务调度/执行自动配置支持多个TaskDecorator bean;基于AntPathMatcher进行 HTTP 映射被弃用,请使用PathPattern;Spring Boot 3.x 中弃用的类、方法和属性被移除;不再支持javax.annotationjavax.inject包中定义的注解,需要将它们替换为与它们作用相同的jakarta.annotationjakarta.inject注解。

 

进一步的改进还包括:应用程序上下文在不使用时现在会暂停,这在大型测试套件中会节省内存;Spring Framework 7 切换到了 GraalVM Native Image 的单文件可达性元数据格式;Spring Data 在构建时编译符合条件的仓库查询,以实现更快的启动;MongoDB 健康指标不再需要 Spring Data MongoDB;新的spring-boot-starter-opentelemetry包含了 OTLP 指标和追踪导出的所有依赖项;SSL 健康响应中新增的expiringChains条目会显示通过management.health.ssl.certificate-validity-warning-threshold属性配置的阈值内到期的证书链,这样的证书链会包含一个或多个证书。

 

值得注意的第三方依赖项升级包括 Kotlin 2.2.20、Tomcat 11.0、Jetty 12.1、GraphQL 24、Kafka 4.1.0、Elasticsearch Client 9.1、Hibernate Validator 9.0、Commons Lang3 3.19.0、Liquibase 5.0、Flyway 11.11、MongoDB 5.6.0、Mockito 5.20 和 TestContainers 2.0。

 

与 Spring Framework 7.0 和 Spring Boot 4.0 同步发布的版本包括Spring Cloud 2025.1.0Spring for GraphQL 2.0Spring Shell 4.0.0Spring REST Docs 4.0Spring Security 7.0Spring Data 2025.1.1.0Spring Session 4.0.0Spring Integration 7.0Spring Batch 6.0Spring AMQP 4.0Spring for Apache Kafka 4.0 Spring for Apache Pulsar 2.0Spring Web Services 5.0Spring Vault 4.0Spring Modulith 2.0

 

Spring Boot 4迁移指南能够帮助开发人员迁移到新版本最后一个Spring Boot 3版本,即 Spring Boot 3.5,将获得免费版本直到 2026 年 6 月,付费版本直到 2032 年 6 月。更多详细信息可以在 Spring Framework 7Spring Boot 4的完整发布说明中找到。

 

查看英文原文: Spring Framework 7 and Spring Boot 4 Deliver API Versioning, Resilience, and Null-Safe Annotations

2025-11-25 11:574

评论

发布
暂无评论

面向对象学习

一叶知秋

大型互联网应用解决问题的技术方案和手段

GAC·DU

软件测试缺陷等级划分准则

海浪豆豆

软件测试

一个典型的大型互联网应用系统使用了哪些技术方案和手段,主要解决什么问题?请列举描述。

娄江国

极客大学架构师训练营

大型互联网应用系统浅析

飞雪

架构师训练营 第四周 学习总结

RZC

学习总结 - 架构师训练营 - 第四周

走过路过飞过

第 04 周作业提交

白杨

架构学习第四周作业

云峰

互联网系统的问题与方案 - 第四周作业

X﹏X

第四周作业

数字

【架构师第四周作业】

浪浪

第四周感想

数字

week4.学习总结

个人练习生niki👍

互联网系统架构

陈皮

写给大忙人看的进程和线程

苹果看辽宁体育

后端 操作系统

架构师训练营 第四周【作业】

小K

大型互联网应用系统案例

戴维斯

极客大学架构师训练营

第4周作业

第四周作业

changtai

极客大学架构师训练营

【架构师第四周】总结

浪浪

架构师训练营 - 第四周 - 作业

Anrika

极客大学架构师训练营

架构师训练营 - 学习笔记 - 第四周

小遵

Week 04- 作业一:一个典型的大型互联网应用系统使用了哪些技术方案和手段

dean

极客大学架构师训练营

第四章作业

小胖子

大型互联网应用系统使用的方案

ashuai1106

架构师 极客大学架构师训练营

第4周总结

娄江国

极客大学架构师训练营

一个典型的大型互联网应用系统使用了哪些技术

L001

极客大学架构师训练营

架构师训练营第四周作业

fenix

架构师训练营第 0 期第四周作业

无名氏

从软件架构演进“看”做好事情的三条边

学习 架构模式 极客大学架构师训练营 架构演进 三条边

Spring Framework 7和Spring Boot 4引入API版本控制、韧性和Null-Safe注解_后端_InfoQ精选文章