前言:谁懂啊!几十上百个项目升级,手动改到崩溃...
最近部门要把所有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%的坑:
- 确保项目能跑:先保证当前Spring Boot 2项目能正常编译、测试通过,不然升级后更难排查问题。
- 备份!备份!备份!:用Git commit所有代码,或直接复制整个项目文件夹------OpenRewrite会真·改你的代码,万一改崩了还能回滚。
- 检查环境 :
✅ 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再强,也有覆盖不到的地方,这几步必须手动做:
-
确认依赖版本 :打开
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> -
处理配置文件 :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>启动时会提示哪些配置要改,改完记得删掉这个依赖!
-
验证升级结果:
- 先编译:
mvn clean compile,解决可能的依赖冲突 - 再跑测试:
mvn test,看看核心测试用例是否通过 - 最后启动项目:
mvn spring-boot:run,观察日志有没有报错
- 先编译:
总结:升级Spring Boot 3,就该这么高效!
其实整个流程很简单:
备份代码→装插件→预览修改→自动执行→手动补漏→验证
最后甩两个官方链接,升级时遇到细节问题可以查:
- Spring官方迁移指南:github.com/spring-proj...
- OpenRewrite的Spring Boot 3最佳实践:docs.openrewrite.org/recipes/jav...
觉得有用的话,赶紧转发给正在被升级折磨的同事,一起少加班~ 👍