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,就该这么高效!

其实整个流程很简单:

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

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

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

相关推荐
171320330计算机毕设编程1 小时前
计算机毕业设计 基于springboot+vue的在线观鸟视频播放网站 LW PPT
java·大数据·vue.js·spring boot·算法·课程设计
星辰云-7 小时前
# 基于Spring Boot的德州特产扒鸡商城系统(毕设|源码|论文|演示视频)
spring boot·后端·课程设计
星辰云-7 小时前
基于Spring Boot的旅游景点票务系统的设计与实现(毕设项目,附完整源码)
spring boot·后端·课程设计
十年Java程序媛8 小时前
JVM 基础与 GC 垃圾回收详解|可达性分析、分代模型、垃圾收集器、STW
java·开发语言·jvm·spring boot·后端·面试
她的男孩9 小时前
JAR 全对仍 checksum mismatch:Forge Admin 把 Flyway 从 filesystem 改成 classpath
java·数据库·spring boot
小蒜学长9 小时前
基于数据挖掘的京东商城商品推荐系统设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·推荐系统·个性化推荐
IT研究室9 小时前
最新计算机毕业设计选题推荐-基于spring boot的医院体检管理系统-网站-文档指导-Java-springboot
java·spring boot·课程设计
长不大的杨瑞杰9 小时前
把 Spring Boot 接口变成 AI 工具:OpenAPI、参数映射与异常语义化实战
人工智能·spring boot·后端
RuoyiOffice9 小时前
Vue3+TypeScript 企业管理平台统一UI:新增一个模块,为什么还要重新调样式?
spring boot·typescript·vue3·组件化开发·企业管理软件·ruoyi office·统一ui