大版本迁移应拆成“JDK、依赖、源码、测试、配置、运行时”六层,每层都可验证和回滚。一次改完再看编译错误,会把因果关系混在一起。
Table of contents
Open Table of contents
先建立基线
记录当前 JDK、Spring、Boot、构建插件、容器和三方 starter 版本。运行单测、集成测试、契约测试和代表性压测,保存启动时间、内存、错误率与延迟。
本实验固定 Boot 4.1.1、Java 21,并同时在 JDK 25 构建。查看实验 pom.xml下载。
迁移顺序
- 在旧框架支持范围内先升级 JDK 和构建工具;
- 清理已废弃 API 与重复依赖覆盖;
- 将
javax.*迁移为 Jakarta EE 10/11 对应的jakarta.*; - 升级 Boot BOM,让它统一管理兼容依赖;
- 处理 starter、自动配置和测试模块变化;
- 运行生产流量回放与灰度。
不要对 javax 做全局文本替换:javax.sql、javax.crypto 等 Java SE 包不会迁到 Jakarta。
Boot 4 的可见变化
Boot 4 使用 Spring Framework 7,进一步模块化 starter 和测试支持。例如 MVC 推荐 spring-boot-starter-webmvc,AOP 使用
spring-boot-starter-aspectj。依赖是否存在应以当前Boot 构建系统文档为证据。
检查自定义自动配置的导入文件、条件注解、配置属性和失败分析器。三方 starter 若未声明 Boot 4 支持,不要靠排除依赖强行运行。
用行为证明完成迁移
编译通过只证明符号兼容。还要验证 JSON 格式、异常协议、事务回滚、代理类型、数据库方言、管理端点、优雅停机和原生反射配置。
灰度期间对比旧新版本业务结果和 SLO,保留数据库向后兼容与快速回滚。迁移完成后删除临时兼容层,更新 ADR 和运行手册。
下一步
阅读Reactor 与 Spring WebFlux,理解响应式模型的优势和阻塞边界。