2024 年 12 月,Spring Boot 3.4 刚发布、JDK 21 LTS 满一年、JDK 17 LTS 满三年。回看过去 28 年(1996 JDK 1.0 - 2024 Spring Boot 3.4),Java 生态的版本节奏从"5 年一版 LTS"加速到"2 年一版 LTS"。对于一个 Java 团队来说,版本选型就是技术战略。
本文写于 2024 年 12 月——JDK 17 LTS 是当下主推、JDK 21 LTS 崭露头角,Spring Boot 3.3/3.4 是生产首选。下文的部分早期版本(JDK 8、JDK 11、Spring Boot 2.x)以"2024 视角回望"的方式呈现。
一、JDK 版本演进时间线(1996-2024)
| 版本 | 发布日期 | 关键特性 | 状态 |
|---|---|---|---|
| JDK 1.0 | 1996-01-23 | Java 起点 | 已淘汰 |
| JDK 1.1 | 1997-02-19 | 内部类、反射、JavaBeans | 已淘汰 |
| JDK 1.2 | 1998-12-04 | Collections 框架、JIT、Swing | 已淘汰 |
| JDK 1.3 | 2000-05-08 | HotSpot JVM、JavaSound | 已淘汰 |
| JDK 1.4 | 2002-02-13 | 正则、NIO、日志、XML | 已淘汰 |
| JDK 1.5 | 2004-09-30 | 泛型、注解、枚举、并发包 | 已淘汰 |
| JDK 1.6 | 2006-04 | 动态语言支持、HTTP Server API | 已淘汰 |
| JDK 1.7 | 2011-07-28 | G1 回收器、try-with-resources、菱形语法 | 已淘汰 |
| JDK 1.8 LTS | 2014-03-18 | Lambda、Stream、Optional、Nashorn、移除 PermGen | 当前生产主力 |
| JDK 9.0 | 2017-09-21 | 模块系统(JPMS)、JShell、HTTP/2 Client | 已淘汰 |
| JDK 10.0 | 2018-03-21 | 局部变量类型推断 var | 已淘汰 |
| JDK 11 LTS | 2018-09-25 | HttpClient、ZGC(实验)、Lambda var、移除 Java EE/CORBA | 生产新主力 |
| JDK 12.0 | 2019-03-19 | Switch 表达式(预览) | 已淘汰 |
| JDK 13.0 | 2019-09-17 | 文本块(预览) | 已淘汰 |
| JDK 14.0 | 2020-03-17 | Records(预览)、NPE 增强提示 | 已淘汰 |
| JDK 15.0 | 2020-09-15 | ZGC + 密封类(预览) | 已淘汰 |
| JDK 16.0 | 2021-03-16 | Records 正式 | 已淘汰 |
| JDK 17 LTS | 2021-09-15 | Sealed Classes 正式、Switch 模式匹配 | 2024 当下生产主力 |
| JDK 21 LTS | 2023-09 | 虚拟线程正式 | 2024 新晋 LTS |
1.1 LTS 节奏
- 1.6 (2006) → 1.7 (2011):5 年
- 1.7 (2011) → 1.8 (2014):3 年
- 1.8 (2014) → 11 (2018):4 年(Oracle 改为"3 年一版 LTS")
- 11 (2018) → 17 (2021):3 年
- 17 (2021) → 21 (2023):2 年(开始加速)
对企业选型的启示:
- 5-7 年一个 LTS 周期,意味着企业 JDK 升级周期约为 3-5 年
- 选 LTS 版本长期维护,规避非 LTS 短期版本
1.2 JDK 8 的"长寿"原因
JDK 8(2014-03-18 发布)到 2024 年 12 月已经 10 年,至今仍有一批存量系统在跑(行业惯性 + 商业 JDK 8 商业支持仍在售)。原因:
- Lambda + Stream 改变 Java 编程范式
- Optional + CompletableFuture 提升函数式能力
- 方法引用 / 默认方法 增强接口演进能力
- Nashorn(已废弃)首次带来 JVM 跑 JS 能力
- PermGen → Metaspace 减少 OOM 痛点
直到 JDK 11 出现,Java 生态才"集体升级"。2024 视角回望:JDK 8 的"长寿"在 JDK 11 / JDK 17 之后才被真正打破——这也是 LTS 节奏从 5 年压缩到 2 年的拐点。
1.3 JDK 11 的 5 大新特性
- HTTP Client API 标准化(孵化多版本后正式)
- ZGC 可用(毫秒级 GC 暂停,4TB 堆支持)
- Lambda 参数
var(写(var x, var y) -> ...) - 移除 Java EE / CORBA(瘦身 30%+)
- 飞行记录器(JFR)开放(生产可启用)
二、Spring Boot 版本演进时间线(2014-2024)
| 版本 | 发布日期 | 关键特性 | JDK 要求 |
|---|---|---|---|
| Spring Boot 1.0 | 2014-04 | 起步 | JDK 6+ |
| Spring Boot 1.2 | 2015-01 | 引入 starter 体系 | JDK 6+ |
| Spring Boot 1.3 | 2015-11 | @SpringBootApplication | JDK 6+ |
| Spring Boot 1.4 | 2016-04 | @SpringBootTest | JDK 6+ |
| Spring Boot 1.5 | 2017-01 | Kafka/Actuator 完善 | JDK 7+ |
| Spring Boot 2.0 | 2018-03 | WebFlux、Reactive、Java 8+ | JDK 8+ |
| Spring Boot 2.1 | 2018-10 | GraalVM(实验)、性能优化 | JDK 8+ |
2.1 Spring Boot 版本命名规则
| |
2.2 截至 2024-12 的版本选择
| |
生产推荐(2024 视角):
- 保守派:Spring Boot 3.3 + JDK 17(LTS 长期维护组合)
- 激进派:Spring Boot 3.4 + JDK 21(虚拟线程 + 模式匹配)
- 存量维护:Spring Boot 2.7(已于 2023-11 停止 OSS 支持,仅商业支持)
2.3 Spring Boot 2.6 → 2.7 关键变化
2.6(2021-11)默认禁止循环引用:
| |
2.7(2022-05)核心新特性:
@AutoConfiguration注解(替换过时的注册方式)- GraphQL 支持
- Podman 支持(替代 Docker)
- RabbitStreamTemplate 支持
- Hazelcast 支持
- Cache2k 支持
- Web Server SSL 增强
- Info 端点增强
- 单元测试加强
三、版本选型实战建议(2024 年时点)
3.1 新项目起步
| 场景 | JDK | Spring Boot |
|---|---|---|
| 企业内部管理系统 | 17 | 3.3 |
| 互联网电商 | 21(虚拟线程) | 3.4 |
| 金融/政府强合规 | 17(合规) | 3.2(稳定) |
| IoT 边缘计算 | 21 | 3.4 |
3.2 升级路径
JDK 8 → JDK 11 升级清单:
| |
Spring Boot 1.5 → 2.1 升级清单:
| |
3.3 监控升级
升级后必做的几件事:
- JVM 启动参数对比:
| |
- GC 切换:
| |
- 监控接入:
| |
四、写在最后
2024 年这个时点,Java 生态已经历了"JDK 17 → JDK 21"、“Spring Boot 2.x → 3.x"两轮大升级。对于一个想保持竞争力的 Java 团队:
- 保守策略:JDK 17 + Spring Boot 3.3 → 2025 评估 JDK 21 升级
- 激进策略:JDK 21 + Spring Boot 3.4(2024 当下就用,吃虚拟线程红利)
个人建议:
- 2024 年新项目:直接用 JDK 21 + Spring Boot 3.4
- 已有项目升级:以 JDK 17 + Spring Boot 3.3 为目标版本,2025 上半年完成
- 长期规划:2026 年底前完成所有项目 JDK 21 升级
五、2024 视角回望 2018
站在 2024 年 12 月回望 2018 年 12 月那篇文章的选型判断,6 年时间 Java 生态的演进有三条主线:
- LTS 节奏真正加速:2018 年还是"3 年一版 LTS"的预期,2024 年看是"2 年一版 LTS”(17→19→21)。企业升级窗口期被进一步压缩
- Spring Boot 2.6/2.7 完成了 1.x → 2.x 最后的过渡:默认禁止循环引用(2.6)、
@AutoConfiguration注解(2.7)都是为 3.0 破坏性升级铺路 - GraalVM 从实验变实战:2018 年 Spring Boot 2.1 提"GraalVM 实验",到 2024 年 Spring Boot 3.x + GraalVM Native Image 已成云原生部署标配
- JDK 8 的"超长服役"被打破:2024 年新项目几乎默认 JDK 17+,“用 JDK 8 起步"已是历史
