Spring Boot 1.x、2.x 3.x区别汇总
Spring Boot 1.x、2.x 和 3.x 是 Spring Boot 发展过程中的三个主要大版本,每个版本都伴随着底层 Spring Framework 的升级、Java 版本的支持演进、架构理念的调整以及对现代云原生和响应式编程的支持增强。以下从 发布时间、核心依赖、Java 支持、关键特性、破坏性变更、适用场景 等维度进行系统对比分析。
一、总体演进概览
| 版本 | 发布时间 | 基于 Spring Framework | 最低 Java 版本 | 最高支持 Java | 主要方向 |
|---|---|---|---|---|---|
| 1.x | 2014–2018 | 4.x | Java 6/7 | Java 8 | 快速启动、简化配置、约定优于配置 |
| 2.x | 2018–2023 | 5.x | Java 8 | Java 19(2.7+) | 性能优化、响应式支持、云原生准备 |
| 3.x | 2022–至今 | 6.x | Java 17 | Java 21+ | GraalVM 原生镜像、Jakarta EE 9+、模块化、现代化 |
✅ 关键转折点:
- 2.x 引入响应式栈(WebFlux)和 Micrometer 监控
- 3.x 是“现代化重构”版本,拥抱 Jakarta EE、GraalVM 和 Java 17+
二、各版本详细分析
🟢 Spring Boot 1.x(1.0 – 1.5)
核心特点:
- 首次提出“约定优于配置”理念,极大简化 Spring 应用搭建。
- 内嵌 Tomcat/Jetty,无需部署 WAR。
- 自动配置(
@EnableAutoConfiguration)机制成熟。 - 支持 Spring 4.x(基于 Servlet 3.0+)。
技术栈:
- 默认 Web 容器:Tomcat 7/8
- 默认 JSON:Jackson 2.6+
- 安全:Spring Security 4.x
- 数据库:Hibernate 4/5, Spring Data JPA
局限性:
- 无响应式编程支持。
- 监控端点(Actuator)功能较弱,路径为
/health、/info等,无安全隔离。 - 配置属性命名不统一(如
server.context-pathvsmanagement.context-path)。
现状:
- 已停止维护(1.5.x 于 2019 年 8 月 EOL)。
- 不建议新项目使用。
🔵 Spring Boot 2.x(2.0 – 2.7)
重大升级(2.0):
- 升级到 Spring Framework 5.x。
- 引入 响应式编程栈 WebFlux(基于 Reactor)。
- 默认使用 Spring Security 5(支持 OAuth2.0 客户端/资源服务器)。
- Actuator 端点重构:
- 路径统一为
/actuator/xxx - 支持细粒度安全控制(
management.endpoints.web.exposure.include=*)
- 路径统一为
- 配置属性标准化(如
server.servlet.context-path替代server.context-path)。 - 默认数据库连接池从 Tomcat JDBC 切换为 HikariCP(性能更好)。
- 引入 Micrometer 作为统一指标监控门面(替代 Dropwizard Metrics)。
后续增强(2.1–2.7):
- 支持 Java 11(2.1+)、Java 17(2.5+)
- 支持 Kotlin、Lombok 深度集成
- 支持 RSocket(2.2+)
- 支持 GraalVM 实验性原生镜像(2.7+,需 Spring Native 项目)
破坏性变更(2.0):
- Hibernate 5.2+(移除
Session.get()的String重载) - Thymeleaf 3(模板语法变化)
- Redis 客户端从 Jedis 切换为 Lettuce(默认)
现状:
- 2.7.x 是最后一个 2.x 版本,已于 2023 年 11 月停止 OSS 支持(商业支持延续)。
- 仍广泛用于存量系统,但新项目应优先考虑 3.x。
🟣 Spring Boot 3.x(3.0 – 3.3+)
重大变革(3.0):
这是 Spring Boot 历史上最具颠覆性的版本之一
1. Java 17+ 强制要求
- 最低 Java 17(LTS),推荐 Java 21(下一个 LTS)。
- 利用 Java 17+ 新特性(如密封类、模式匹配预览等)。
2. 迁移到 Jakarta EE 9+
- 所有
javax.*包名替换为jakarta.*:javax.servlet→jakarta.servletjavax.persistence→jakarta.persistencejavax.validation→jakarta.validation
- 影响:所有依赖必须兼容 Jakarta EE 9+(如 Hibernate 6+、Tomcat 10+)。
3. GraalVM 原生镜像官方支持
- 无需额外插件(如旧版 Spring Native),通过
native-maven-plugin直接构建原生可执行文件。 - 启动速度 < 100ms,内存占用降低 50%+,适合 Serverless/FaaS。
4. 移除过时技术
- 移除:
- Velocity 模板引擎
- Guava 缓存自动配置
- Commons Logging(全面转向 SLF4J)
@ConfigurationProperties的宽松绑定(仅支持 kebab-case)
5. 可观测性增强
- 深度集成 Micrometer Tracing(支持 Brave、OpenTelemetry)
- Actuator 默认暴露
/actuator/health、/actuator/info,其他需显式开启。
6. 虚拟线程(Virtual Threads)初步支持(3.2+)
- 与 Java 21+ 虚拟线程协同,提升高并发吞吐(需 Tomcat 10.1+ 或 Jetty 12)。
破坏性变更(3.x):
- 所有
javax→jakarta(需代码/依赖升级) - Hibernate 6(JPQL 语法变化、字节码增强方式改变)
- Thymeleaf 3.1(模板引擎更新)
- 不再支持 Java 8/11
现状:
- 当前主流版本(3.2/3.3 为最新稳定版)
- 新项目唯一推荐版本
三、版本选择建议
| 场景 | 推荐版本 | 理由 |
|---|---|---|
| 全新项目(2024+) | Spring Boot 3.2+ | 支持 Java 17/21、GraalVM、Jakarta EE、长期维护 |
| 存量系统升级 | 2.7 → 3.x(需评估) | 需处理 javax → jakarta、Hibernate 6 迁移 |
| 必须使用 Java 8/11 | Spring Boot 2.7(最后支持) | 3.x 不兼容 Java <17 |
| 需要 GraalVM 原生镜像 | Spring Boot 3.0+ | 官方集成,无需额外项目 |
| 使用旧版中间件(如 Tomcat 8) | Spring Boot 1.5 或 2.7 | 3.x 要求 Tomcat 10+ |
四、迁移注意事项
从 2.x → 3.x 关键步骤:
- 升级 JDK 到 17+
- 替换所有
javax.*为jakarta.*(IDE 可批量替换) - 升级依赖:
- Hibernate 5 → 6
- JPA 注解从
javax.persistence→jakarta.persistence - Servlet API 从
javax.servlet→jakarta.servlet
- 检查第三方库兼容性(如 MyBatis 3.5.10+ 支持 Jakarta)
- 启用原生镜像(可选):
<plugin><groupId>org.graalvm.buildtools</groupId><artifactId>native-maven-plugin</artifactId> </plugin>
五、总结
| 维度 | 1.x | 2.x | 3.x |
|---|---|---|---|
| 定位 | 快速起步 | 企业级成熟 | 云原生现代化 |
| Java 支持 | 6–8 | 8–19 | 17+ |
| Servlet API | javax | javax | jakarta |
| 响应式 | ❌ | ✅(WebFlux) | ✅(增强) |
| GraalVM | ❌ | 实验性(Spring Native) | ✅(官方支持) |
| 维护状态 | EOL | OSS EOL(2023) | Active |
💡 结论:
- 新项目必须使用 Spring Boot 3.x(搭配 Java 17/21)
- 2.x 仅用于维护旧系统
- 1.x 应彻底淘汰
Spring Boot 3.x 不仅是版本升级,更是向 云原生、低延迟、高能效 架构的战略转型,代表了 Spring 生态的未来方向。
