Spring Framework 6.2 和 Spring Boot 3.4 为 2025 年新一代做好准备

Spring Framework 6.2 和 Spring Boot 3.4 为 2025 年新一代做好准备

精选文章moguli202025-05-08 14:34:299A+A-

VMware 于 2024 年 11 月发布了Spring Framework 6.2和Spring Boot 3.4,保持了 Java 17 和 Jakarta EE 9 的基准。Spring Boot 3.4 具有结构化日志记录,为 Docker Compose 和 Testcontainers 添加了各种容器镜像,并改进了容器镜像构建和执行器。VMware 还宣布将于 2025 年 11 月发布 Spring Framework 7 和 Spring Boot 4,它们将保留 Java 17 但迁移到 Jakarta 11,采用JSpecify 实现空安全,并使用 Project Leyden加快应用程序启动速度。InfoQ 就这些 2025 年版本采访了 Spring Framework 项目负责人 Juergen Hoeller 和 Spring Framework 核心提交者 Sébastien Deleuze。

在结构化日志记录中,日志输出具有明确定义、通常为机器可读的格式。Spring Boot 支持 Elastic Common Schema (ecs)、Logstash (logstash) 和 Graylog Extended Log Format (gelf) 格式。设置logging.structured.format.file为这三个值之一将启动结构化文件日志记录,而logging.structured.format.console定义结构化控制台日志记录格式。

Docker Compose 可以通过新属性spring.docker.compose.start.arguments和接收命令行参数spring.docker.compose.stop.arguments并处理 POSTGRES_HOST_AUTH_METHOD=trust环境变量。Spring Boot 为 Docker Compose 和 Testcontainers 添加了各种容器镜像:带有和redis/redis-stack的Redis Stack 和 Redis Stack Server、带有redis/redis-stack-server和Testcontainers类的Grafana LGTM。Testcontainers现在支持带有类的 Kafka 。grafana/otel-lgtm LgtmStackContainer KafkaContainer

现在,使用来自不受信任来源的构建器构建 OCI 映像会更加安全(请参阅Maven和GradletrustBuilder的文档)。该选项可以为与主机平台不同的操作系统和架构构建容器映像。现在,JVM 应用程序的默认 Cloud Native Buildpacks 构建器是,这应该会产生更小的映像。它开箱即用地支持 ARM 和 x64。imagePlatformpaketobuildpacks/builder-jammy-java-tiny

新的只读执行器访问模式加入了两个现有的重命名模式,分别为“无限制访问”(已启用)和“无访问”(已禁用)。这就是为什么management.endpoints.enabled-by-default被称为management.endpoints.access.default,并且management.endpoint.<id>.enabledmanagement.endpoint.<id>.access。 下的新执行器端点/actuator/info显示 SSL 信息,包括即将过期的证书。/scheduledtasks端点显示有关计划任务的更多信息,例如“下一个计划执行时间”和“上次执行时间、状态和异常”。

嵌入式 Web 服务器现在默认正常关闭。设置server.shutdownimmediate可撤销该更改。Undertow Web 服务器使用虚拟线程(如果启用)。RestClient并且RestTemplate现在可以使用以下五个 HTTP 客户端中的任意一个(按优先顺序):Apache HTTP 组件 ( HttpComponentsClientHttpRequestFactory)、Jetty 客户端 ( JettyClientHttpRequestFactory)、Reactor Netty HttpClient( ReactorClientHttpRequestFactory)、JDK HttpClient( JdkClientHttpRequestFactory) 和 Simple JDK HttpURLConnection( SimpleClientHttpRequestFactory)。

在 ActiveMQ Classic 再次支持嵌入式代理后,Spring Boot 可以使用 再次自动配置它org.apache.activemq:activemq-broker。与 Spring Boot 2.7.x 相反,ActiveMQ 启动器仅为客户端。可观察性属性spring.application.group将属于更大单元的应用程序组合在一起。已为 OTLP 日志记录添加了 Docker Compose 和 Testcontainers 支持。

Spring Boot 不再依赖OkHttp库,因此需要它的用户现在必须自己管理版本。@MockBean@SpyBean注释已被弃用,取而代之的是 Spring Framework 的@MockitoBeanMockitoSpyBean。 Spring Boot 3.4 仅适用于 Gradle 7.6.4 和 Gradle 8.4.0 版本系列或更高版本。

Spring Boot 3.4 中值得注意的 Spring 依赖项升级包括 Spring Security 6.4、Spring Session 3.4、Spring Integration 6.4、Spring Batch 5.2 和 Spring for Apache Kafka 3.3。值得注意的第三方依赖项升级包括 Log4j 2.24、Liquibase 4.29、Flyway 10.20、MySQL 9.1.0、MongoDB 5.2.0、Hibernate 6.6、Reactor 2024.0.0、Kafka 3.8、Jackson 2.18、Apache Http Client 5.4、Micrometer 1.14、HtmlUnit 4.3.0、Selenium 4.25.0、Mockito 5.13、JUnit Jupter 5.11 和 Testcontainers 1.20.3。

Spring Framework 6.0 和 6.1 以及 Spring Boot 3.0 和 3.2 具有更多面向用户的功能,例如使用 GraalVM Native Image 进行提前编译或支持虚拟线程和 CRaC。 Spring Framework 6.2 和 Spring Boot 3.4 缺乏此类引人注目的功能。 对于 Spring Framework 一代的最后一年来说,这并不罕见:在 2022 年 6.0 发布之前,2021 年根本没有发布 Spring Framework 。

Spring Framework 项目负责人Juergen Hoeller最近宣布,新的 Spring Framework 7 和 Spring Boot 4 将于 2025 年 11 月发布。它们将保留 JDK 17 基线,但“拥抱即将推出的 JDK 25 LTS”,预计该版本将提前两个月发布。Kotlin 基线将迁移到 Kotlin 2,Jakarta EE 基线从 9 迁移到 11,这将带来 Tomcat 11、Hibernate ORM 7 和 Hibernate Validator 9。Spring 项目还将采用JSpecify 来实现空值安全。

VMware 的 Spring Framework 核心提交者Juergen Hoeller 和Sébastien Deleuze热情地回答了 InfoQ 的问题。

InfoQ:Spring Framework 6 是自 2.0 以来最短的一代,2009 年 2.0 也经过三年就结束了。为什么?

Juergen Hoeller:从历史上看,我们的框架更新换代都是由当时的个别因素推动的。我们从未设定某一代的特定生命周期,而是设定触发新版本的某些功能范围。出于同样的原因,我们的次要版本发布节奏通常为每年一次,但偶尔会跳过一年。我们为每一代的最后一个功能版本提供长期支持;多年来一直如此。

展望未来,我们正在适应行业趋势,其中可预测的发布,特别是可预测的长期支持节奏将成为常态。最重要的是,我们正在适应更频繁的 JDK 节奏和更频繁的第三方依赖项主要版本。因此,我们现在不再受范围驱动,而是受时间驱动,主要是针对 Spring Boot,也针对 Spring Framework

InfoQ:Spring Framework 6 需要 JDK 17,而 JDK 17 当时已经有一年的历史了。Spring Framework 7 将以 Java 17 为基准,而不是使用当时已有两年历史的 JDK 21。为什么 Spring 7 自 2006 年 2.0 以来首次保留了前几代 Java 的基准?

Hoeller:我们的基准通常源自技术问题。Java 17 比 Java 11(当时的替代选择)提供了许多优点,因此我们立即在 Spring Framework 6.0 中采用了它,大大实现了代码库的现代化,并推动了整个行业的发展 - 但代价是升级路径变得更加困难,同时 Jakarta EE 命名空间也发生了变化。

对于 Spring Framework 7.0,Java 基线升级几乎没有任何技术优势。可以通过多版本 jar 轻松提供针对较新 Java 版本的特定功能,就像我们已经为 Java 21 中的虚拟线程所做的那样。当前的行业共识显然围绕 Java 17 基线,例如,Jakarta EE 11 API 和即将推出的提供程序一代。由于我们当前的框架代码库不会从基线升级中受益,因此我们的目标是保持 Java 17 基线,同时在同一代中为 Java 21 和 Java 25 提供一流的支持。相反,我们的基线提升附带 Jakarta EE 11 API,例如 Jakarta Servlet 6.1 和 Jakarta Persistence 3.2,以及 Kotlin 2。

我们通常建议将最新的 Java LTS 版本用于生产部署,与底层基线无关,这实际上只是框架在运行时容忍的技术最低限度。对于 Spring Framework 7.0,尽管 Java 17 是基线,但我们的重点显然是拥抱 Java 25。展望未来,我们可以看到 Java 25 在未来成为更广泛的 Java 生态系统的一个有吸引力的新基线。但是,目前,我们能做的最好的事情就是将其作为我们 JDK 版本范围的一部分来支持。

InfoQ:Spring 7 公告中提到了 JSpecify,它标准化了空安全注解。Spring Framework 6 和 Spring Boot 3 目前是如何暴露空安全的?Spring Framework 7 和 Spring Boot 4 中又会有哪些变化?

Sébastien Deleuze:@Nullable Spring Framework 6 提供了类似包中的空安全注释org.springframework.lang。这些注释使用 JSR 305 注释(一种休眠但广泛使用的 JSR)进行元注释,让 IDEA 或 Kotlin 等工具供应商能够以通用方式提供空安全支持。

在 Spring Framework 7 中,我们将暂时迁移到JSpecify注释,这是 Spring 团队参与多年的一项全行业努力,并且将弃用 Spring 空安全注释。

迁移到 JSpecify 应该会带来各种改进,例如:

为工具供应商提供适当的规格,并为最终用户提供文档。不再因 JSR 305 注释而导致拆分包,从而影响 JPMS 兼容性。更好的 Kotlin 集成。能够指定泛型类型、数组和可变参数元素空安全。可供其他不基于 Spring 的库使用,例如 Reactor 和 Micrometer。

我们还打算在进一步的 Spring 组合项目中全面指定 API 空安全。

InfoQ:Spring 7 的发布会上提到了“与 GraalVM 和 Project Leyden 的战略联盟”。是什么让这种联盟具有战略意义呢?

德勒兹:我们与 GraalVM 和莱顿项目的结盟具有战略意义,主要有三个原因。

首先,它们是互补的。GraalVM 提供了巨大的好处,例如即时启动/预热,但代价是构建时间长和兼容性问题等重大限制。Project Leyden 的 AOT 缓存提供了巨大的好处,例如启动时间快了 3 到 4 倍 - 可能不如 GraalVM 原生镜像那么引人注目,但对于许多用户来说已经足够了,而且在使用 Spring Boot 专用支持时副作用很少。专注于这两种技术将增强 Spring Boot 4 应用程序在许多部署场景中的效率。

其次,Spring 团队与这两个团队都有着积极的研发合作,最近在 Project Leyden 上与 Java 平台团队进行了联合会谈,在 2024 年比利时 Devoxx 大会上与GraalVM 团队就原生图像进行了联合会谈,就说明了这一点。

第三,这也是一种战略,因为我们将大部分研发精力集中在这些技术上,为寻求指导的 Spring 开发人员提供两条黄金路径。两者都可以利用 Spring Ahead-Of-Time 优化和 Buildpacks。我们预计 Project Leyden 的 AOT 缓存将成为类数据共享(CDS) 的后继者,我们目前从 Spring Boot 3.3 开始支持它。

目前,我们还没有计划在 CRaC 项目上投入更多精力,因为对于我们的用户来说,该项目往往更难利用 - 请参阅此比较。因此,借助 Leyden 项目在 JVM 上的 AOT 缓存(以及临时的 CDS)以及基于 GraalVM 的本机映像,我们正在努力为 Spring Boot 4 代提供两种主流效率选项。

有关更多信息,请参阅Spring Framework 6.2和Spring Boot 3.4的发行说明。

点击这里复制本文地址 以上内容由莫古技术网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

莫古技术网 © All Rights Reserved.  滇ICP备2024046894号-2