为 Spring Boot 3.0 做准备

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

Spring Boot 2.0 是 2.x 系列的第一个版本,于 2018 年 2 月 28 日发布。我们刚刚发布了 Spring Boot 2.7,这意味着到目前为止,我们已经维护 2.x 系列四年多了。在此期间,我们总共发布了 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 的特性(例如 records)。

如果可能的话,我们强烈建议您立即升级您的 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 许可。

我们始终欢迎反馈,并且非常高兴在发布通用版本之前发现并解决 Bug。

您可以在 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 社区所有即将举办的活动。

查看全部