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-path vs management.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.servletjakarta.servlet
    • javax.persistencejakarta.persistence
    • javax.validationjakarta.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):
  • 所有 javaxjakarta(需代码/依赖升级)
  • 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(需评估) 需处理 javaxjakarta、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 关键步骤:

  1. 升级 JDK 到 17+

  2. 替换所有 javax.*jakarta.*(IDE 可批量替换)

  3. 升级依赖

    • Hibernate 5 → 6
    • JPA 注解从 javax.persistencejakarta.persistence
    • Servlet API 从 javax.servletjakarta.servlet
  4. 检查第三方库兼容性(如 MyBatis 3.5.10+ 支持 Jakarta)

  5. 启用原生镜像(可选)

    xml 复制代码
    <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 生态的未来方向。

相关推荐
机器学习算法与Python实战3 小时前
一个强大的开源OCR工具,基于DeepSeek OCR
1024程序员节
blammmp3 小时前
Spring Boot集合RabbitMQ
1024程序员节
没有bug.的程序员4 小时前
Spring Boot 起步:自动装配的魔法
java·开发语言·spring boot·后端·spring·1024程序员节
Hero | 柒4 小时前
设计模式之建造者模式
java·设计模式·1024程序员节
不脱发的程序猿4 小时前
如何检测和解决I2C通信死锁
stm32·单片机·嵌入式·1024程序员节
wbs_scy4 小时前
C++类和对象(中):const 成员函数与取地址运算符重载
1024程序员节
CodeLongBear4 小时前
帝可得智能售货机系统实战Day1:从环境搭建到区域管理功能落地 (1)
java·1024程序员节·ai + 若依框架
Lansonli4 小时前
大数据Spark(七十):Transformation转换算子cogroup和zip使用案例
1024程序员节
白鹿第一帅4 小时前
星光不负 码向未来|我的HarmonyOS学习之路与社区成长故事
1024程序员节