Spring Boot 2.7 → 3.x + JDK 21 升级实录:兼容矩阵、GC 选型与参数调优
摘要:把一个 6 年历史的 Spring Boot 2.7 / JDK 8 项目升级到 Spring Boot 3.2 / JDK 21:依赖兼容、javax→jakarta 包名迁移、反射与字节码增强组件的连环坑,最后用 GC 日志对比完成 G1 → ZGC 的选型验证。这篇文章是完整的升级路径记录:升级顺序怎么排、每个依赖怎么对版本、GC 日志怎么读、参数怎么调,以及\”哪些升级收益不值得折腾\”。
关键词:Spring Boot 3、JDK 21、ZGC、GC 调优、依赖升级
适合人群:维护老项目的 Java 团队
一、升级顺序:不要一步到位
JDK 8 → 21 + Boot 2.7 → 3.2 同时做,出问题无法定位是谁的锅。我们的顺序:
阶段1:JDK 17 运行 + Boot 2.7(验证 JVM 兼容,喂 GC 日志基线)
阶段2:JDK 17 + Boot 3.x(做包名迁移与依赖升级)
阶段3:JDK 21 + Boot 3.x(开虚拟线程、ZGC)
每阶段全量回归 + 压测,稳定运行一周再进入下一阶段。
阶段 1 的价值:JDK 17 跑老 Boot 大概率能起(JDK 17 的兼容性做得比 11 好),先拿到新 JDK 的 GC 基线数据,后面才有的对比。



