? 上下文
我们都知道…
Spring Boot
3.0
来了❕
几个月以来,作为我们管道从 onPremise 迁移到 Github.com 流程的一部分,我们一直在 Spring Native 上进行原型设计,并通过升级进行维护投资:
? 收获
这是一项艰巨的工作,但为我们提供了改进测试策略的机会(更少的代码以获得更多的覆盖率)、依赖关系清理/删除以在不久的将来使原生更容易。
请注意,这项投资使得以更舒适的连续节奏和更少时间消耗的方式实现
RUN
任务成为可能……同时使升级我们所依赖的中间件成为可能。
☝️ 切换到 Spring 数据库
作为依赖关系清理的一部分,我们为 Elasticsearch 切换到 Spring Data ,因此我们依赖Spring Data而不是 Elastic 的。
所以我们选择了以下直截了当的策略:
我们确实将我们的 Elastic 实例迁移到 Elastic 7… 并等待基于 Spring 6 和 Java 17 的 Spring Boot 3。
在兼容性矩阵下方查找(因此您不必寻找它?):
? Docker 准备
与此同时,我们还准备了嵌入安全 Java 17 运行时的传统(非本地)docker 镜像,更多信息请参见下文:
? 准备好迎接 Spring Boot 3
幸运的是,Spring 在推特上发表了一篇关于这个主题的专门帖子:
乔什·朗@starbuxman2022 年 5 月 25 日下午 12:00
根据博客文章,以下是您可以做的准备工作。
在我们的团队中,这将用作清单,以准备尽可能干净地迁移:
1️⃣ 升级到 Java 17
“Spring Boot 3.0 将需要 Java 17。”
因此,它可以使用Records 。
这里还有春天的建议:
“如果可能,我们强烈建议您今天升级您的 JDK。”
2️⃣ 升级到最新的 Spring Boot 2.7.x
Spring 将提供 Spring Boot 3 的迁移指南…
“但它会假设您是从 Spring Boot 2.7 迁移而不是早期版本。”
我们还应用了以下迁移策略,以持续的方式进行 SB 升级(因此我们最终可以大幅减少我们的技术债务):
如果您是从 Spring Boot 2.5 或更早版本升级,我们不建议跳过版本。** 分步升级**(例如 2.5 → 2.6 → 2.7)通常比尝试直接从 2.5 → 2.7 升级更容易。
3️⃣ 检查对已弃用代码的调用
Spring Boot 3.0 将删除所有已弃用的代码,因此我们建议您检查现有代码是否不依赖任何已弃用的方法。如果报告了弃用警告,值得考虑使用
-Werror
Java 编译器选项使构建失败。
4️⃣ 从 Legacy application.properties
和application.yaml
处理迁移
Spring Boot 3.0 不会提供遗留处理支持,因此您应该检查您的项目是否未设置
spring.config.use-legacy-processing
。
5️⃣ 使用 Spring MVC 的 PathPatternParser
我们建议尽可能使用
PathPatternParser
,因为它提供了更好的性能。
6️⃣其他
另请参阅完整的博客文章,了解更多关于第三方项目拥有 Jakarta EE 9 兼容版本和第三方项目已更新 Spring 兼容版本的信息