Spring Boot 2升3太痛苦?用OpenRewrite批量搞定,少走90%弯路!

前言:谁懂啊!几十上百个项目升级,手动改到崩溃...

最近部门要把所有Spring Boot 2项目升级到3,消息一出,团队里哀嚎一片------

「我们光微服务就有30多个,每个项目里的javax换jakarta、API过时、依赖冲突...手动改到猴年马月?」

「上次试改一个小项目,改完启动报20多个错,排查三天没搞定...」

直到我们挖到了OpenRewrite这个神器------自动批量改代码、处理依赖、替换过时API,原本预估3个月的工作量,居然1个月就搞定了大半!

今天就把这份「Spring Boot 2→3无痛升级指南」甩给你,看完直接抄作业,再也不用对着代码熬夜秃头~

先认识下:OpenRewrite到底是个啥?

简单说,这是一个「代码自动重写工具」,堪称程序员的「批量改代码外挂」。

它能像人一样读代码、分析代码,然后按规则自动修改------比如:

✅ 把Java 8代码一键改成Java 17兼容版

✅ 把所有javax.servlet自动换成jakarta.servlet(Spring Boot 3必改项)

✅ 检测并替换Spring 6里删掉的旧API(比如@Async的用法变化)

✅ 甚至能帮你升级Maven/Gradle依赖版本,还不会搞乱版本冲突

除了Spring Boot升级,它还能搞定JUnit 4→5、Java EE→Jakarta EE等迁移,简直是「版本升级救星」!

实战:用OpenRewrite一键升级Spring Boot 3,分5步走

👉 第一步:升级前必须做的3件事(不然可能翻车)

别上来就瞎改!这3件事能帮你避开80%的坑:

  1. 确保项目能跑:先保证当前Spring Boot 2项目能正常编译、测试通过,不然升级后更难排查问题。
  2. 备份!备份!备份!:用Git commit所有代码,或直接复制整个项目文件夹------OpenRewrite会真·改你的代码,万一改崩了还能回滚。
  3. 检查环境 :
    ✅ JDK必须17+(Spring Boot 3最低要求),先装好并配置好JAVA_HOME
    ✅ Maven建议3.6.3+,老版本可能不兼容插件

👉 第二步:给项目装上OpenRewrite「插件」

找到项目根目录的pom.xml,添加这段配置(直接复制粘贴就行):

xml 复制代码
<!-- OpenRewrite插件:自动处理代码升级 -->
<plugin>
  <groupId>org.openrewrite.maven</groupId>
  <artifactId>rewrite-maven-plugin</artifactId>
  <version>6.2.2</version>
  <configuration>
    <!-- 核心:指定要执行的「升级菜谱」,这里是升级到Spring Boot 3.3 -->
    <activeRecipes>
      <recipe>org.openrewrite.java.spring.boot3.UpgradeSpringBoot_3_3</recipe>
    </activeRecipes>
  </configuration>
  <dependencies>
    <!-- 引入Spring专用的升级规则包 -->
    <dependency>
      <groupId>org.openrewrite.recipe</groupId>
      <artifactId>rewrite-spring</artifactId>
      <version>6.2.1</version>
    </dependency>
  </dependencies>
</plugin>

⚠️ 注意:如果项目是多模块(子模块很多),先在命令行执行这句增加内存,避免改到一半内存溢出:

bash 复制代码
# Windows系统
set MAVEN_OPTS=-Xmx2048m -XX:MaxHeapSize=1024m 

# Mac/Linux系统
export MAVEN_OPTS="-Xmx2048m -XX:MaxHeapSize=1024m"

👉 第三步:先预览,看看它会改哪些地方(放心,不实际改代码)

执行这个命令,让OpenRewrite先「模拟升级」,生成一份修改报告:

bash 复制代码
mvn rewrite:dryRun

跑完后,去target/rewrite/patch.diff文件里看------这里会列出所有要改的地方:

比如哪行代码的javax换成了jakarta,哪个依赖版本从2.x升到了3.x,哪个类的方法被替换了...

像这样:

diff 复制代码
- import javax.persistence.Entity;
+ import jakarta.persistence.Entity;

- @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
+ @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)

先检查一遍,确认没有明显错误(比如误删代码),再进行下一步。

👉 第四步:执行真正的升级!让它自动改代码

确认预览没问题后,执行这句,OpenRewrite就会开始「动手改代码」了:

bash 复制代码
mvn rewrite:run

等待几分钟(项目大的话可能久一点),它会自动完成这些事:

✅ 替换所有javax包为jakarta(Spring Boot 3基于Jakarta EE 9+)

✅ 更新Spring相关依赖版本到3.x(比如spring-core、spring-boot-starter-web)

✅ 替换过时API(比如@Validated的包路径、WebMvcConfigurer的方法变化)

✅ 甚至会帮你调整application.properties里的配置项(比如有些属性名变了)

👉 第五步:手动收尾+验证(自动化也有漏网之鱼)

OpenRewrite再强,也有覆盖不到的地方,这几步必须手动做:

  1. 确认依赖版本 :打开pom.xml,检查父依赖和java.version是否正确:

    xml 复制代码
    <properties>
      <java.version>17</java.version> <!-- 必须17+ -->
      <spring-boot.version>3.4.3</spring-boot.version> <!-- 用最新稳定版 -->
    </properties>
    <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>3.4.3</version>
    </parent>
  2. 处理配置文件 :Spring Boot 3删掉了一些旧配置(比如server.tomcat.max-threads换成了server.tomcat.threads.max)。

    可以加个依赖帮你检测:

    xml 复制代码
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-properties-migrator</artifactId>
      <scope>runtime</scope>
    </dependency>

    启动时会提示哪些配置要改,改完记得删掉这个依赖!

  3. 验证升级结果:

    • 先编译:mvn clean compile,解决可能的依赖冲突
    • 再跑测试:mvn test,看看核心测试用例是否通过
    • 最后启动项目:mvn spring-boot:run,观察日志有没有报错

总结:升级Spring Boot 3,就该这么高效!

其实整个流程很简单:

备份代码→装插件→预览修改→自动执行→手动补漏→验证

最后甩两个官方链接,升级时遇到细节问题可以查:

觉得有用的话,赶紧转发给正在被升级折磨的同事,一起少加班~ 👍

相关推荐
Yyyyyy~13 小时前
【Java】Day4Web基础知识
java·spring boot
逆回17 小时前
升级 Boot 4 后,我的 mock 全红了
spring boot
学长毕设20 小时前
基于SpringBoot的野生动物公益保护平台设计与实现-附源码
java·spring boot·后端
她的男孩21 小时前
三人会签只批了一个就往下走:Forge Admin 把 all / any / ratio 写成 completionCondition
spring boot·低代码·工作流引擎
vipxieliang1 天前
ValidX vs 手写验证代码:开发效率对比实测
java·spring boot·后端
vipxieliang1 天前
虚拟线程与 GraalVM:Spring Boot 3.x 云原生性能跃迁
java·spring boot·后端
头发还在的女程序员1 天前
基于 Spring Boot + Vue 3 + uni-app 的灵活用工系统:四端架构与业务流程设计
vue.js·spring boot·uni-app·灵活用工·灵工系统
CoderYanger1 天前
Java EE 进阶:8.MyBatis 操作数据库(入门)(第二弹)
java·数据库·spring boot·spring·面试·java-ee·mybatis
计算机毕设定制辅导-无忧学长2 天前
《基于微信小程序的居家医疗陪护预约系统设计与实现》
java·spring boot·微信小程序·uniapp·居家医疗陪护预约系统
小郎君6582 天前
注解式脱敏:用 Jackson 的 ContextualSerializer 做字段级策略(一)
spring boot·spring cloud