为 Spring Boot 3.0 做准备

工程 | Phil Webb | 2022 年 5 月 24 日 | ...

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 中的功能(例如记录)在您自己的代码库中。

我们强烈建议您在尽可能的情况下立即升级您的 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 集成的第三方 jar,则应检查它们是否计划发布 Spring Framework 6 兼容版本。

尝试 Spring Boot 里程碑版本

尽管我们不建议将其用于生产环境,但您今天可以尝试 Spring Boot 3.0 里程碑版本以了解迁移项目的难度。在您的代码分支上尝试里程碑版本是预防任何潜在问题的好方法。它们可从https://repo.spring.io/milestone获取。在https://start.spring.io上创建一个项目并选择最新的 3.0 里程碑版本将在构建配置中包含必要的存储库。

如果您尝试将现有的 2.7.x Spring Boot 应用程序升级到最新的 3.0.0 里程碑版本,您可能还需要查看Spring Boot Migrator项目。这个实验性项目旨在自动化许多迁移任务,包括升级。它是使用OpenRewrite构建的,并且是 Apache 2.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 找到。

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

获取 Spring 新闻

与 Spring 新闻保持联系

订阅

领先一步

VMware 提供培训和认证,以助您快速提升技能。

了解更多

获取支持

Tanzu Spring 通过一个简单的订阅提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。

了解更多

即将举行的活动

查看 Spring 社区中所有即将举行的活动。

查看全部