Skip to main content

Command Palette

Search for a command to run...

准备迎接Spring Boot 3.0

Published
准备迎接Spring Boot 3.0

原文地址:Preparing for Spring Boot 3.0

image.png Spring Boot 2.0 是 2.x 线的第一个版本,于 2018 年 2 月 28 日发布。我们刚刚发布了 Spring Boot 2.7,这意味着到目前为止,我们已经将 2.x 线维护了超过 4 年。 在此期间,我们总共发布了 95 个不同的版本!

整个 Spring 团队,以及我们社区中的许多贡献者,现在都在为下一代 Spring 做准备。 我们计划在 2022 年 11 月发布 Spring Boot 3.0。下一个主要版本将基于 Spring Framework 6.0,并且需要 Java 17 或更高版本。 它也将是第一个使用 Jakarta EE 9 API (jakarta.*) 而不是 EE 8 (javax.*) 的 Spring Boot 版本。

接下来的六个月提供了一个理想的机会,为自己的项目准备这个主要的版本。 在这篇博文中,我们将为您介绍现在可以做的一些事情,以便未来的迁移工作尽可能轻松。

升级到Java 17

Spring Boot 3.0 将需要 Java 17,但您无需等到该版本升级到最新的 LTS Java 版本。 任何最近的 Spring Boot 2.x 版本都可以很好地与 Java 17 配合使用。您还可以在自己的代码库中使用 Java 17 功能(例如:record)。

如果可能,我们强烈建议您立即升级 JDK。

升级到最新的Spring Boot 2.7.x

如果您当前使用的是旧版本的 Spring Boot 2.x,我们强烈建议您升级到 Spring Boot 2.7。 当 Spring Boot 3.0 发布时,我们将提供迁移指南,但它假定您是从 Spring Boot 2.7 而不是早期版本迁移。

我们的版本说明中一直会提供升级指南。 例如,如果您要从 Spring Boot 2.6 升级到 Spring Boot 2.7,就可以按照升级指南操作(https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.7-Release-Notes#upgrading-from-spring-boot-26)。

如果您从 Spring Boot 2.5 或更早版本升级,我们不建议跳过版本。 分步升级(例如 2.5 → 2.6 → 2.7)通常比尝试直接从 2.5 → 2.7 升级更容易。

检查对已废弃代码的调用

随着 Spring Boot 的发展,我们经常会弃用方法或类并提供替代品。 我们通常会提供 12 个月的重叠期,之后会删除不推荐使用的代码。 您可以在我们的 wiki(https://github.com/spring-projects/spring-boot/wiki/Deprecations)找到该政策的详细信息。

Spring Boot 3.0 将删除所有已弃用的代码,因此我们建议您检查现有代码是否已不依赖任何已弃用的方法。 如果提示了弃用警告,值得考虑使用 -Werror Java 编译器选项来使构建失败。

从旧版 application.propertiesapplication.yaml 处理迁移

Spring Boot 2.4 改变了application.propertiesapplication.yaml 文件的加载方式。 大多数用户都没有注意到这个更改,但一些项目可能已经将spring.config.use-legacy-processing 属性设置为 true 以旧行为运行。

旧版本的这项支持不会出现在 Spring Boot 3.0 中,因此您应该检查您的项目是否未设置spring.config.use-legacy-processing

使用Spring MVC的PathPatternParser

Spring MVC 提供了两种解析模式的方法。 从 Spring Boot 2.6 开始,默认使用 PathPatternParser

一些应用可能通过设置 spring.mvc.pathmatch.matching-strategy 属性手动切换回 AntPathMatcher 实现。 尽管这将在 Spring Boot 3.0版本继续工作,但我们建议尽量使用 PathPatternParser,因为它提供了更好的性能。

检查第三方项目是否有 Jakarta EE 9 兼容版本

Jakarta EE 9 是一个新的顶级 jakarta 包,取代了 EE 8 的 javax 顶级包。 例如,Jakarta EE 8 中的 Servlet 规范使用 javax.servlet 包,但在 EE 9 中已更改为 jakarta.servlet

一般来说,不可能在同一个项目中混合使用 Java EE 和 Jakarta EE API。 您需要确保您自己的代码以及所有第三方库都使用 jakarta.*包导入。

好消息是大多数维护良好的库都在生产 Jakarta EE 9 兼容的变体。 例如 Hibernate、Thymeleaf、Tomcat、Jetty 和 Undertow 都已经这样做了。

我们建议您花一些时间检查您使用的任何与 Jakarta EE 集成的第三方库,并检查它们是否具有兼容 EE 9 的变体。 我们发现的最常见是导入 Servlet API 的项目。

检查第三方项目是否更新了 Spring 兼容版本

Spring Framework 6.0 不会与上一代二进制兼容。 如果您正在使用提供Spring集成的第三方jar,您应该检查他们是否正在计划与 Spring Framework 6 兼容的版本。

试用Spring Boot里程碑版本

尽管我们不推荐将其用于生产,但您可以立即尝试 Spring Boot 3.0 里程碑版本,看看迁移项目的难度会有多难。 在代码的分支上尝试里程碑版本是发现任何潜在问题的好方法。

我们总是对反馈感兴趣,并且在我们发布 GA 版本之前发现错误时会让我们非常高兴。

您可以在 github.com/spring-projects/spring-boot/issues提出问题(确保告诉我们您正在使用的 Spring Boot 版本)。

考虑商业支持

Spring Boot 2.7 是 2.x 系列中的最后一个计划版本。 我们已将此版本的开源支持再延长 6 个月,直至 2023 年 11 月。

此外,对 Spring Boot 2.7 的商业支持也已延长,有效期至 2025 年 2 月。

您可以在 spring.io/projects/spring-boot 找到项目支持详细信息。 有关商业支持的详细信息,请访问 tanzu.vmware.com/spring-runtime

由商业支持请求触发的任何发布都将始终作为开源发布,因此商业客户也可以帮助开源社区。

More from this blog

用Java 17的Records加速Spring Boot开发

在《Spring Boot 2.6新特性:使用Java 17的Record作为配置属性》,我们提到了使用Java Records来作为Spring Boot的配置属性(configuration properties),从而减少了大量样板代码的编写,我们本篇将进一步拓展Records在Spring Boot下的应用场景,从而进一步减少我们的样板代码,使代码看上去更简洁清晰。 1、什么是Records record是一种特殊类型的类声明,目的是为了减少样板代码。record引入的主要目的是快速创...

Nov 11, 2022
用Java 17的Records加速Spring Boot开发

Spring Boot 2.6新特性:使用Java 17的Record作为配置属性

Spring Boot 3.0的基线版本是Java 17,Spring Boot 3.0版本将全面对Java 17的支持。较新版本的2.x的Spring Boot版本也可以使用Java 17的特性。 本文介绍Spring Boot 2.6对Java 17支持的一个新特性,使用Java 17的Record来做为Spring Boot的配置属性(ConfiguartionProperties)。 什么是Record record是一种特殊类型的类声明,目的是为了减少样板代码。record引入的主要目...

Nov 3, 2022
Spring Boot 2.6新特性:使用Java 17的Record作为配置属性

使用Gradle全面加速Spring Boot开发

大家都知道Gradle和Maven一样,是一个项目的构建工具。它通过任务来控制开发的进程,这些任务包括:编译、打包、测试、部署和发布等。Gradle诞生于2008年,仅仅比Maven晚4年。Android也采用Gradle作为默认的构建工具。 本文期望通过以下的讲述,帮助你快速轻松的使用Gradle加速您的Spring Boot开发应用。 1、Gradle越来越流行 2012年开始,Spring框架已全部使用Gradle来构建;2020年开始,Spring Boot也全部采用Gradle来构建...

Oct 31, 2022
使用Gradle全面加速Spring Boot开发

Spring/Spring Boot下如何动态配置计划任务

在Spring/Spring Boot下实现计划任务是很简单的,我们只需通过@EnableScheduling 开启计划任务的支持,然后通过@Scheduled 注解来制定计划任务,这样的实现解决了我们对计划任务的绝大部分需求。 但在很多时候,通过上述方式实现的计划任务是在代码里写死的,我们需要修改计划任务只能通过修改代码的方式实现。很多时候,我们需要从外部来设置计划任务执行的时间和方式。所以在本文中,我们着重讲解一下如何动态地配置计划任务。 和Spring对异步任务的支持一样,通过@Enabl...

Oct 29, 2022
Spring/Spring Boot下如何动态配置计划任务

Spring 6/Spring Boot 3新特性:优雅的业务异常处理

当你使用Spring Boot(Spring MVC)进行RESTful API开发的时候,你会发现HTTP的状态码很多时候不能足够有效的传递错误的信息。 HTTP里有一个RFC 7807规范:https://www.rfc-editor.org/rfc/rfc7807。这个规范里定义了HTTP API的“问题细节”(Problem Details)内容。 该规范定义了一个“问题细节”(Problem Details),用它来携带HTTP错误返回信息,避免自定义新的错误返回格式。我们通常情况下是...

Oct 28, 2022
Spring 6/Spring Boot 3新特性:优雅的业务异常处理

汪云飞的工具箱

24 posts