Spring Boot 2.5、3.5 和 4.0 之间的核心差异,以及各版本升级注意事项的详细对比
以下是 Spring Boot 2.5、3.5 和 4.0 之间的核心差异,以及各版本升级注意事项的详细对比: 一、Spring Boot 2.5、3.5、4.0 核心差异对比表格
[td]维度 | Spring Boot 2.5 | Spring Boot 3.5 | Spring Boot 4.0 | Java 版本要求 | Java 8 ~ 17 | Java 17 ~ 24 | Java 17 ~ 26 | Spring Framework 版本 | 5.x | 6.x | 7.x | 命名空间变更 | 保留 javax.* | 引入 jakarta.* | 完全对齐 Jakarta EE 11 | 模块化配置 | 单体 spring-boot-autoconfigure | 部分模块化 | 完全模块化(拆分为 47 个轻量模块) | 空安全校验 | 使用 @Nullable 等注解 | 使用 JSpecify 1.0 | JSpecify 1.0(编译期空安全) | API 版本控制 | 需自定义实现 | 无内置支持 | 内置支持(路径/Header 式) | HTTP 客户端 | 依赖 Feign 或 WebClient | 内置声明式客户端 | 声明式客户端增强 | 虚拟线程支持 | 无(需手动实现) | 初步支持(JDK 21) | 全面支持(JDK 21+) | GraalVM 原生镜像 | 试验性支持 | 试验性支持 | 生产级支持 | 可观测性增强 | 基础支持 | Micrometer 2.0 | Micrometer 2.0 + 新增 /virtual-threads 端点 | 第三方库兼容性 | 多数依赖为旧版本 | Jackson 3.x、Hibernate 6.x 等 | Jackson 3.x、Hibernate 7.x 等 | 测试框架 | JUnit 4、Mockito 1.x | JUnit 5、Mockito 4.x | JUnit 5、Mockito 5.x |
二、升级注意事项1. 从 Spring Boot 2.5 升级至 Spring Boot 3.5- Java 版本升级:必须从 Java 8/11 升级至 Java 17 或更高版本,否则无法运行。
- 命名空间迁移:所有 javax.* 包需替换为 jakarta.*,例如 javax.servlet.http.HttpServletRequest → jakarta.servlet.http.HttpServletRequest。
- 依赖库升级:
- Jackson 从 2.x 升级至 3.x。
- Hibernate 从 5.x 升级至 6.x。
- Spring Data、Kafka 等需升级至兼容版本。
- Spring Security 配置:WebSecurityConfigurerAdapter 已被移除,需重写配置类。
- 测试框架升级:@Test 注解需从 org.junit.Test 切换至 org.junit.jupiter.api.Test。
- 配置属性变更:部分配置属性已废弃或变更,需参考官方迁移指南。
2. 从 Spring Boot 3.5 升级至 Spring Boot 4.0- 版本前置升级:必须先升级至 Spring Boot 3.5.x 的最新版本(如 3.5.6),再进行 4.0 升级。
- 依赖库兼容性:
- Jackson 从 3.x 保持兼容,但需注意新特性。
- Micrometer 从 2.0 升级至 2.0+,注意接口变更。
- 空安全校验:原 @Nullable、@NonNull 注解需替换为 JSpecify 的 @Nullable、@NonNull。
- 模块化配置:若项目依赖非核心模块(如 spring-boot-starter-data-jpa),需确认其模块是否被拆分。
- 测试类兼容性:移除 MockitoTestExecutionListener,使用 @ExtendWith(MockitoExtension.class)。
- GraalVM 原生镜像:若使用 GraalVM,需确认其版本为 25 或以上,以支持 Spring Boot 4.0 的原生编译优化。
3. 从 Spring Boot 2.5 直接升级至 Spring Boot 4.0- 跳级升级风险:禁止直接跳级升级,必须先升级至 Spring Boot 3.5.x 再升级至 4.0。
- 多版本迁移路径:
- Spring Boot 2.5 → 3.5.x:完成 Java 版本升级、命名空间迁移、依赖库升级、Spring Security 重构。
- Spring Boot 3.5.x → 4.0:完成模块化适配、空安全校验替换、测试类更新。
- 工具辅助:可使用 OpenRewrite 等自动化工具进行代码迁移,减少人工干预。
三、总结- Spring Boot 2.5:适用于遗留系统维护,但需注意安全风险。
- Spring Boot 3.5:作为 3.x 系列的 LTS 版本,是升级至 4.0 的过渡桥梁。
- Spring Boot 4.0:提供更优性能、模块化、空安全和云原生支持,适合新项目或大规模系统重构。
通过分步升级,可有效规避兼容性问题,确保系统稳定运行。
|