升级JDK8 spring5的项目至 boot4+jdk26过程记录(一)
整体方案:在IDEA中用OpenRewrite实现迁移工作

原栈:Spring 5 + JPA(Hibernate) + JDK8 + 纯XML/JavaConfig
目标:Spring Boot4 + Spring Framework7 + Jakarta Persistence + JDK21/26
一、IDEA 必装插件(JPA 专属精简版)
✅ 核心必装(4 个,缺一不可)
1. OpenRewrite(最关键,迁移主力)
- 作用:自动做三件大事1. javax.persistence.* → jakarta.persistence.* 全局替换(JPA 最痛的点)
2. 原生 Spring 5 转 Spring Boot
3. Boot2→3→4、Hibernate 5→6→7 自动升级
- IDE 里可以可视化预览、回滚、局部执行,比命令行更安全
2. Jakarta EE Integration(内置,启用即可)
- 识别 jakarta.persistence 、 jakarta.transaction 、 jakarta.validation
- 解决导入爆红、注解不识别、JPA 实体提示丢失
3. Maven Helper(必装)
- 快速排查:Hibernate、JPA、Spring、JDBC 依赖冲突
- 迁移时 Hibernate 版本最容易炸包冲突
4. Lombok(如果实体用了 @Data/@NoArgsConstructor)
- 必须开注解处理,否则 JPA 实体编译报错
✅ 推荐辅助(2 个,大幅减少踩坑)
5. SonarLint
- 实时标红:废弃 JPA API、旧注解、 javax 残留、空安全问题
- Boot4 + Hibernate7 对空值、级联、校验更严格
6. JPA Buddy(强烈推荐,JPA 神器)
- 自动校验实体映射、外键、索引、@OneToMany/@ManyToOne
- 生成 Repository、DTO、Query、分页
- 一键兼容 Jakarta 包,迁移后快速定位映射异常
二、OpenRewrite 给你加 JPA 专属迁移规则(直接替换之前的配置)
你之前的 rewrite-maven-plugin ,activeRecipes 改成下面这套,专门适配 JPA+Hibernate:
xml
<activeRecipes>
<!-- 1. 原生 Spring5 → Spring Boot2.7(过渡,javax 体系) -->
<recipe>org.openrewrite.java.spring.boot2.SpringBoot2FromSpringFramework</recipe>
<recipe>org.openrewrite.java.spring.boot2.UpgradeSpringBoot_2_7</recipe>
<!-- 2. JPA 专属:javax.persistence → jakarta.persistence 全局替换(重中之重) -->
<recipe>org.openrewrite.java.migrate.jakarta.JavaxPersistenceToJakartaPersistence</recipe>
<recipe>org.openrewrite.java.migrate.jakarta.JavaxValidationToJakartaValidation</recipe>
<recipe>org.openrewrite.java.migrate.jakarta.JavaxTransactionToJakartaTransaction</recipe>
<!-- 3. Spring Boot2 →3:Hibernate5→6,JPA 配置迁移 -->
<recipe>org.openrewrite.java.spring.boot3.UpgradeSpringBoot_3_4</recipe>
<recipe>org.openrewrite.java.hibernate.UpgradeHibernate_6_x</recipe>
<!-- 4. Spring Boot3→4:Hibernate6→7、Spring Framework7 -->
<recipe>org.openrewrite.java.spring.boot4.UpgradeSpringBoot_4_0</recipe>
<recipe>org.openrewrite.java.hibernate.UpgradeHibernate_7_x</recipe>
<!-- 5. JDK 升级到 21,后续再切 26 -->
<recipe>org.openrewrite.java.migrate.UpgradeToJava17</recipe>
<recipe>org.openrewrite.java.migrate.UpgradeToJava21</recipe>
<!-- 6. 清理废弃配置、过时属性 -->
<recipe>org.openrewrite.java.spring.boot3.RemoveDeprecatedSpringBoot2Properties</recipe>
</activeRecipes>
重点说明:
- 专门加了 JavaxPersistenceToJakartaPersistence ,只动 JPA 相关包,不乱改其他代码
- 自动升级 Hibernate 5 →6 →7,适配 Boot4
- 自动把 hibernate.* 配置改成 Boot4 新的 spring.jpa.* 属性
三、IDEA 关键配置(JPA 迁移必开)
1. Project SDK & Language Level- SDK:JDK21
- Language level:21(后续改 26 即可)
2. 开启 Jakarta 支持
Settings → Build, Execution, Deployment → Compilers → Java Compiler
确保使用对应 JDK,且启用 Jakarta EE 支持
3. Lombok 注解处理
Settings → Build → Compiler → Annotation Processors → Enable annotation processing
四、JPA 迁移后你只需要手动检查 3 件事(OpenRewrite 做不到的)
1. 实体注解- 确认所有 @Entity 、 @Id 、 @Column 、 @OneToMany 都已经是 jakarta.persistence
2. persistence.xml / 旧 JPA 配置- Boot4 不再推荐 persistence.xml ,全部迁移到 application.yml :yaml
spring:
jpa:
hibernate:
ddl-auto: validate
properties:
hibernate:
dialect: org.hibernate.dialect.MySQLDialect
show-sql: true
3. 事务- @Transactional 已经从 javax.transaction 自动换到 jakarta.transaction
- 检查 @EnableTransactionManagement 配置
五、最简一句话总结
- 插件:OpenRewrite + Maven Helper + Lombok + JPA Buddy
- 规则:上面这套JPA 专属 OpenRewrite 配置
- 路径:Spring5 → Boot2.7 → Boot3 → Boot4 + Hibernate7 + JDK21

浙公网安备 33010602011771号