百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

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

lipiwang 2025-03-20 16:15 6 浏览 0 评论

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..enabledmanagement.endpoint..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的发行说明。

相关推荐

Qwen上新AI前端工程师!一句话搞定HTML/CSS/JS,秒变React大神

梦晨发自凹非寺量子位|公众号QbitAIQwen上新“AI前端工程师”WebDev,一句话开发网页应用。三大件HTML,CSS,JavaScript一个工具全包了,定睛一看用的还是Reac...

程序员的 JavaScript 代码该如何让计算机搞懂?

出自程序员之手的JavaScript代码,该如何变成计算机所能理解的机器语言呢?本文将带你走进JavaScript引擎内部,一探究竟。作者|LydiaHallie译者|弯月,责编|...

JavaScript:如何优雅的创建数组?

在JavaScript里,有多种方式可以创建数组,下面为你详细介绍:1.使用数组字面量这是最常用的创建数组的方法,使用方括号[]来创建数组。//创建一个空数组letemptyArray...

Jquery 详细用法

1、jQuery介绍(1)jQuery是什么?是一个js框架,其主要思想是利用jQuery提供的选择器查找要操作的节点,然后将找到的节点封装成一个jQuery对象。封装成jQuery对象的目的有...

HTML页面基本结构和加载过程

大家好,我是皮皮。前言对于前端来说,HTML都是最基础的内容。今天,我们来了解一下HTML和网页有什么关系,以及与DOM有什么不同。通过本讲内容,你将掌握浏览器是怎么处理HTML内容的,...

【HarmonyOS Next之旅】兼容JS的类Web开发(一)

目录1->概述1.1->整体架构2->文件组织2.1->目录结构2.2->文件访问规则2.3->媒体文件格式3->js标签配置3....

JavaScript初学者指南

如果你刚接触JavaScript,想必已经被“modulebundlersvs.moduleloaders”、“Webpackvs.Browserify”和“AMDvs.Common...

前端图片延迟加载详细讲解

原文链接:http://www.gbtags.com/gb/share/6366.htm?原本是打算昨天昨天下午的时候就写一篇关于前端图片延迟加载的详细技术的博客的,没想到下午公司项目出现了一些问题...

selenium:操作滚动条的方法(8)

selenium支持几种操作滚动条的方法,主要介绍如下:使用ActionChains类模拟鼠标滚轮操作使用函数ActionChains.send_keys发送按键Keys.PAGE_DOWN往下滑动...

jQuery 获取和设置HTML元素

jQuery中包含更改和操作HTML元素和属性的强大方法。我们可以通过这些方法来获取HTML元素中的文本内容、元素内容(例如HTML标签)、属性值等。text()方法text()方法可以用...

JavaScript脚本如何断言select下拉框的元素内容?

使用JavaScript脚本断言select下拉框的元素内容,需要考虑页面元素是否加载成功,出错时打印等,主要实现功能功能需包括如下几点:1.等待下拉框元素加载完成(支持超时设置)2.获取下...

JavaScript图片或者div拖动拖动函数的实现

/**拖动图片封装html格式:<imglay-src="${item.Resourcesurl}"alt="${item.ResourcesName}"...

JavaScript代码怎样引入到HTML中?

JavaScript程序不能独立运行,它需要被嵌入HTML中,然后浏览器才能执行JavaScript代码。通过<script>标签将JavaScript代码引入到HTM...

当你在Vue.js中想要隐藏 `` 标签时,可以这样做:

在Vue.js里,要是你想要搞掉`<br>`(换行)标签的效果,通常有几种路子:1.使用CSS嗯,最简单的办法就是用CSS搞定,控制元素的样式,让<br>标签彻底不显示...

php手把手教你做网站(三十)上传图片生成缩略图

三种方法:按比例缩小、图片裁切、预览图片裁切不管使用哪一个都是建立在图片已经上传的基础上;预览裁切上传,如果预览的图片就是原始大小,可以预览裁切以后上传(这里是个假象,下边会说明);1、上传以后按比例...

取消回复欢迎 发表评论: