spring boot 主版本升级不是仅改 version,需稳准兼顾:先升至当前主版本最新补丁版(如 2.7.x),再按 jdk 要求(3.x 需 jdk 17+,4.x 需 jdk 21+)同步升级;严格处理 jakarta 包迁移、依赖坐标变更及 security 等配置调整,并通过单元、集成测试与灰度验证保障行为一致性。

升级 Spring Boot 老版本不是改个 version 就完事,关键在“稳”和“准”——既要避开破坏性变更的雷区,又要控制升级节奏,否则容易编译失败、启动报错、安全配置失效甚至线上故障。
先搞清当前版本和目标版本的关系
Spring Boot 主版本升级(比如 2.x → 3.x 或 3.x → 4.x)属于破坏性升级,不能跳着走:
- 如果还在用 2.3.x、2.5.x 这类早期 2.x 版本,别直接冲 3.x 或 4.x;应先升到 2.7.x 最新版,解决废弃警告和兼容问题
- 从 2.7.x 升 3.x 是第一道坎,必须同步升级 JDK 到 17+;从 3.x 升 4.x 则最低要求 JDK 21(官方推荐 JDK 25)
- 查清你用的是哪个次版本:补丁版(如 2.7.18→2.7.19)基本无风险;次版本(如 2.7→2.8)需关注新特性与弃用项;主版本(2→3→4)必须重检依赖、包名、配置项
JDK 和构建工具必须提前对齐
框架升级的前提是环境就位,否则连编译都过不了:
- 运行
java -version和mvn -v(或gradle -v),确认 JDK 和构建工具实际使用的版本 - Spring Boot 3.x 要求 JDK 17+;4.x 要求 JDK 21+(部分场景已要求 JDK 25);Maven 建议 ≥3.9.6,Gradle ≥8.8
- IDE(如 IntelliJ/Eclipse)也要更新到支持对应 JDK 版本的版本,否则代码提示、调试可能异常
包名、依赖和配置三类变更最易出错
这些地方不手动检查,光靠自动工具容易漏掉深层问题:
-
包名迁移:javax.* 全面替换为 jakarta.*(如
javax.servlet.http.HttpServletRequest→jakarta.servlet.http.HttpServletRequest) -
依赖坐标变化:MySQL 驱动从
mysql:mysql-connector-java换成mysql:mysql-connector-j;MyBatis-Plus 必须用 Spring Boot 3/4 专用 starter;Redis 配置前缀从spring.redis.*改为spring.data.redis.* -
配置项调整:Security 中
WebSecurityConfigurerAdapter已移除,改用SecurityFilterChain;某些属性被废弃(如server.tomcat.max-connections),可用spring-boot-properties-migrator插件辅助识别
别省测试,尤其要跑通这几类验证
升级后不验证 = 没升级。重点不是“能启动”,而是“行为没变”:
- 先确保单元测试全部通过(尤其是涉及 Spring AOP、事务、WebMvc 的逻辑)
- 跑一遍集成测试:数据库连接、Redis 读写、HTTP 接口返回、OAuth2/JWT 校验流程
- 检查日志输出是否异常(比如 Jakarta 包加载失败、Hibernate 初始化报
NoClassDefFoundError) - 上线前建议灰度发布,观察线程池、GC、HTTP 响应时间等指标有无明显波动











