前言:谁懂啊!几十上百个项目升级,手动改到崩溃…
最近部门要把所有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,添加这段配置(直接复制粘贴就行):
<!-- 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>⚠️ 注意:如果项目是多模块(子模块很多),先在命令行执行这句增加内存,避免改到一半内存溢出:
# Windows系统setMAVEN_OPTS=-Xmx2048m-XX:MaxHeapSize=1024m# Mac/Linux系统exportMAVEN_OPTS="-Xmx2048m -XX:MaxHeapSize=1024m"👉 第三步:先预览,看看它会改哪些地方(放心,不实际改代码)
执行这个命令,让OpenRewrite先「模拟升级」,生成一份修改报告:
mvn rewrite:dryRun跑完后,去target/rewrite/patch.diff文件里看——这里会列出所有要改的地方:
比如哪行代码的javax换成了jakarta,哪个依赖版本从2.x升到了3.x,哪个类的方法被替换了…
像这样:
- import javax.persistence.Entity; + import jakarta.persistence.Entity; - @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) + @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)先检查一遍,确认没有明显错误(比如误删代码),再进行下一步。
👉 第四步:执行真正的升级!让它自动改代码
确认预览没问题后,执行这句,OpenRewrite就会开始「动手改代码」了:
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是否正确:<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)。
可以加个依赖帮你检测:<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官方迁移指南:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Migration-Guide
- OpenRewrite的Spring Boot 3最佳实践:https://docs.openrewrite.org/recipes/java/spring/boot3/springboot3bestpractices
觉得有用的话,赶紧转发给正在被升级折磨的同事,一起少加班~ 👍