为Spring Boot 3.0做准备

538 阅读5分钟

Spring Boot 2.0是2.x系列的第一个版本,于2018年2月28日发布。 我们刚刚发布了Spring Boot 2.7,这意味着到目前为止,我们维护2.x系列的时间刚刚超过4年。 在这个时间框架内,我们总共发布了95个不同的版本!整个Spring团队和我们社区的许多贡献者现在正在准备下一代Spring。

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

在接下来的6个月里,我们将提供一个理想的机会,让你自己的项目为这个重要的版本做好准备。 在这篇博文中,我们将介绍一些你今天可以做的事情,以使未来的迁移尽可能不受影响。

升级到Java 17

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

如果可能的话,我们强烈建议你今天升级你的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,你可以按照这一节来做。

如果你从Spring Boot 2.5或更早的版本升级,我们不建议跳过版本。 分步升级(如2.5→2.6→2.7)往往比直接从2.5→2.7升级要容易。

检查对已废弃代码的调用情况

随着Spring Boot的发展,我们经常会废止一些方法或类,并提供替代品。 我们通常提供12个月的重叠期,之后废止的代码会被删除。 你可以在我们的wiki上找到这一政策的细节。

Spring Boot 3.0将删除所有废弃的代码,因此我们建议您检查您的现有代码是否依赖任何废弃的方法。 值得考虑使用-Werror Java编译器选项,以便在报告废弃警告时无法构建。

从传统的application.properties和application.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集成的第三方罐子,你应该检查它们是否计划发布Spring Framework 6兼容版本。

试试Spring Boot的里程碑

虽然我们不建议在生产中使用,但你今天可以试试Spring Boot 3.0里程碑,看看迁移你的项目会有多难。 在你的代码分支上尝试里程碑,是预防任何潜在问题的好办法。它们可以从repo.spring.io/milestone。start.spring.io,创建一个项目并选择最新的3.0里程碑,将在构建配置中包括必要的存储库。

我们总是对反馈感兴趣,如果在我们发布GA版本之前发现了错误,我们会非常高兴。

您可以在github.com/spring-proj…上提出问题(请确保告诉我们您使用的Spring Boot版本)。

考虑商业支持

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

此外,对Spring Boot 2.7的商业支持也已延长,可使用至2025年2月。

您可以在spring.io/projects/sp…找到项目支持的详细信息。 商业支持的详细信息可以在tanzu.vmware.com/spring-runt…找到。

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