SpringBoot3.x 升级到 SpringBoot 4.x,JDK17升级到JDK21

目录

背景

目前SpringBoot3.x不维护了,并且我们要新开个项目,因此准备直接使用SpringBoot4,顺便Java切换为21

现状

我们项目背景:

  • Spring 3.1.x
  • Java使用的是17
  • 数据库使用的mybatis-plus

升级清单总览

核心升级(借助openrewrite工具)

步骤 1:使用 upgradespringboot_3_5 配方,升级到 Spring Boot 3.5.x。

步骤 2:运行项目,确保在 3.5.x + Java 17 下完全正常。解决所有编译错误和测试失败。(这是关键的稳定化步骤)

步骤 3:使用 upgradetojava21 配方,升级项目到 Java 21。运行并验证。

步骤 4:使用 upgradespringboot_4_0 配方,升级到 Spring Boot 4.0.x。

其他变更升级(手动升级)

  1. 手动将openrewrite中不涉及的国产第三方依赖如 MyBatis-Plus 等第三方依赖升级到已确认兼容的版本。

  2. 处理Jackson:使用AI辅助处理

SpringBoot迁移方案

主体步骤

使用 openrewrite 辅助迁移,能自动把项目中的代码、pom进行修改升级。

OpenRewrite 是一个用于源代码的开源自动化重构生态系统,能让开发者有效消除其代码库中的技术债务。

参考官方文档:Spring-Boot-4.0-Migration-Guide,Spring4.0升级指南,其中提到,建议先升级到3.5.x,然后再升级到4.0,因此我们按照这个方案(对于生产项目,遵循Spring官方建议(先3.5,再4.0)是更稳妥、风险更低的选择。测试项目,应该可以直接使用下面的升级到4.0)

  1. 去openrewrite寻找迁移到3.5.x的文档:升级到3.5.x文档

    PS:升级其他版本可以在这里看到:目录

    注意:我们选择社区版即可

  2. 记得备份本地代码库/暂存(因为会直接修改你的代码库,所以,为了保证没问题,建议最好备份一下代码库,或者自己创建一个新分支)

  3. 修改最外层的pom,按照升级文档,向 maven 或 gradle 中添加对应的配置文件,执行命令,以上面的3.5.x为例子,如下

  4. 等待执行完毕即可,会自动修改代码&pom文件的,然后记得运行一下Spring项目,如果有问题,则进行额外排查/升级(对于线上系统,在自动化升级后,必须进行系统性的代码审查、编译检查和集成测试。)

  5. (Spring官方建议)自行使用一些代码扫描工具,扫描其中可能出现的使用了废弃API/类的地方,自行替换成推荐版

额外步骤

  1. 我的项目引入了mybatis-plus,以及dynamic-data-source,因此,需要自行阅读mybatis的文档,自行更新到最新版本,我在下面贴出来对应的官网文档,自行更新pom,如果有升级文档,也自己看看,跟着改就行。
    Mybatis-Plus
    dynamic-datasource

JDK升级方案

原本:17,以下是升级方案:

  1. 如果使用的是idea,记得修改project-structure里的sdk,以及language level(其他编辑器自行搜索如何更改)
  2. 如法炮制,使用openrewrite升级Java
    openrewrite-upgradetojava21

SpringBoot 从3.5.x升级到4.x

参考3.5.x迁移方案,只是切换了配方,新配方:upgradespringboot_4_0,然后自行运行看看有无问题,然后使用到的国产的包也自行修改吧。

Jackson升级

SpringBoot,从Jackson2升级到了Jackson3,因此我们也需要做对应升级。但是上述的 oenrewrite 有限,无法完全重置,因此需要我们借助AI的能力,进行重置。

随便找一个能联网搜索的AI助手,借助它来帮助我们修改为等价的代码,然后测试即可。

相关推荐
程序猿DD1 小时前
OctaFuse Gateway 2.15.0:MCP 聚合、向量 Embeddings 与官方目录同步
后端·agent
蛋蛋的就会顺顺的4 小时前
hot100 p0——栈,贪心算法,动态规划
java·前端·javascript·算法·leetcode·力扣
余槐i4 小时前
PostgreSQL 函数索引报错 must be immutable:3种绕法与代价
数据库·后端·sql·postgresql·性能优化
需要8264 小时前
Spring Bean 生命周期:从实例化到销毁的完整钩子
java·后端·spring
小 黄 鸡4 小时前
HashMap 面试必会知识点详解(JDK 8)
java·面试·职场和发展
凤山老林5 小时前
Spring Boot 接入国密 SM2/SM3/SM4 的一些实践记录
spring boot·后端·python
伯恩bourne6 小时前
Spring Boot Bean 注册的两种方式:@Component 家族 vs @Configuration + @Bean
java·spring boot·后端
张彦峰ZYF7 小时前
停顿短不等于延迟低:G1、ZGC 与低延迟服务的目标分野、代价账本与选型标定
后端·回收暂停、应用停止总时长·到达安全点、分配停滞·屏障吃吞吐、并发线程吃核心·并发窗口吃堆余量·分区式靠挑回收集兑现目标·染色指针式不支持压缩引用
silvamux_7 小时前
curl 测试 OpenAI 兼容 API 的完整流程
java·人工智能·缓存·ai·oneapi
pride.li7 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉