一、Spring Boot 2 与 3 核心区别(25 条)
1. 基础架构升级
- 最低 JDK 版本 :Boot2 = JDK8+;Boot3 = JDK17+(强制)
- Spring Framework 版本 :Boot2 = 5.x;Boot3 = 6.x
- Jakarta EE 替换 Java EE :Boot2 =
javax.*;Boot3 =jakarta.*(最大破坏性变更) - GraalVM 原生镜像支持 :Boot2 弱支持;Boot3 官方原生支持,编译为二进制可执行文件
- 终止支持时间 :Boot2 已停止免费维护;Boot3 长期支持到 2026 年
2. 配置与文件变化
- 配置文件绑定:Boot3 对松散绑定校验更严格,非法配置直接启动失败
- application.properties/yml 语法:Boot3 废弃大量旧配置项,新增大量新配置
- 日志框架 :Boot2 默认 Logback;Boot3 依然 Logback,但包路径、API 全变
- 环境变量绑定规则 :Boot3 更严格,不兼容模糊命名
- 配置文件加密:Boot3 内置更安全的配置加密机制
3. 依赖与第三方组件
- Jakarta Servlet :Boot2 =
javax.servlet;Boot3 =jakarta.servlet - Jakarta Validation :Boot2 =
javax.validation;Boot3 =jakarta.validation - Jakarta Persistence(JPA) :Boot2 =
javax.persistence;Boot3 =jakarta.persistence - Tomcat 版本 :Boot2 = Tomcat9;Boot3 = Tomcat10+
- Undertow/Jetty:全部升级到 Jakarta 版本
- Jackson 版本:Boot3 升级到 2.15+,序列化行为变化
- Hibernate :Boot2 = 5.x;Boot3 = 6.x,SQL 生成、方言全变
- Spring Security:Boot3 重构大量 API,废弃旧写法
- Spring Data JPA:Boot3 废弃大量查询方法、接口
- Spring Cloud :Boot2 对应 Hoxton/2021;Boot3 必须用 2023+ 版本
4. API 与功能变化
- @ConstructorBinding :Boot3 废弃,改用
@ConfigurationProperties - 默认不允许循环依赖 :Boot2 默认允许;Boot3 默认禁止循环依赖
- AOP 代理:Boot3 默认使用类代理(CGLIB),行为变化
- HTTP 接口测试 :
MockMvc包路径变化 - 定时任务 / 调度 :
@Scheduled部分参数变化
二、Spring Boot 3 升级优势(15 条)
性能与效率
- 启动速度提升 50%~300%:JDK17 + 虚拟线程 + 原生镜像
- 内存占用降低 30%~70%:原生镜像无 JVM 重载
- 虚拟线程(Virtual Threads)支持:超高并发,几千线程不卡顿
- JDK17 新特性:Switch 模式匹配、Stream 优化、ZGC 低延迟 GC
- AOT 提前编译:启动极快,适合云原生 / Serverless
安全与规范
- Jakarta EE9+ 规范:更安全、更现代、无历史包袱
- 内置安全加固 :默认禁用不安全协议、加密算法升级
- 漏洞更少:Boot2 停止更新,漏洞不再修复;Boot3 持续修复
开发体验
- 更严格的校验:启动时暴露配置错误,避免线上事故
- 原生 Observability:内置链路追踪、指标、日志一体化
- Spring AI 原生支持:Boot3 才能用 Spring AI 对接大模型(你之前问的 AI)
- 更好的 Docker/K8s 支持:官方镜像构建插件
- 统一的异常处理:ProblemDetail 标准化接口返回
- Test 性能提升:测试启动更快,隔离更好
- 官方支持 ARM 架构:Mac / 国产服务器完美支持
三、Spring Boot 3 升级必踩坑(10 条)
真实项目 100% 会遇到的坑
- javax 包替换为 jakarta:Servlet、Filter、Listener、JPA、Validation 全报错
- JDK 版本强制 17 :老项目 JDK8 语法不兼容,如
Base64/Unsafe - 循环依赖报错:Boot2 能跑;Boot3 直接启动失败
- MyBatis/MyBatis-Plus 不兼容:必须升级到 3.5.3+ 版本
- Druid 连接池不兼容:必须升级到 1.2.20+,否则启动失败
- Hibernate 6 SQL 语法变化:分页、count 查询、字段映射报错
- Spring Security 重构 :旧配置类全部报错,
WebSecurityConfigurerAdapter废弃 - FastJSON 不兼容:Boot3 建议用 Jackson,FastJSON 2 才支持
- Nacos/Sentinel/Seata:Spring Cloud 必须升级,老客户端不兼容
- Lombok 低版本报错:必须升级到 1.18.24+,否则 JDK17 无法编译
超精简总结(面试 / 汇报直接用)
核心一句话区别
- Spring Boot 2 :JDK8 + javax + 稳定老生态,已停止维护
- Spring Boot 3 :JDK17 + jakarta + 高性能 + 云原生 + AI 原生,未来主流
升级最大价值
- 解决安全漏洞、停止维护风险
- 性能暴涨、内存大降
- 支持虚拟线程 + Spring AI + 云原生
- 长期官方支持
升级最大坑
javax → jakarta 包名替换 + JDK17 + 第三方依赖不兼容
升级最大价值
解决安全漏洞、停止维护风险 性能暴涨、内存大降 支持虚拟线程 + Spring AI + 云原生 长期官方支持