# 准备迎接Spring Boot 3.0

原文地址：[Preparing for Spring Boot 3.0](https://spring.io/blog/2022/05/24/preparing-for-spring-boot-3-0)


![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1658890167684/3WHBj1w8G.png align="left")
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](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](https://github.com/spring-projects/spring-boot/wiki/Deprecations)）找到该政策的详细信息。

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

## 从旧版 `application.properties` 和 `application.yaml` 处理迁移
Spring Boot 2.4 改变了`application.properties` 和 `application.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](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](spring.io/projects/spring-boot) 找到项目支持详细信息。 有关商业支持的详细信息，请访问 [tanzu.vmware.com/spring-runtime](tanzu.vmware.com/spring-runtime)。

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

