Featured image of post Spring Boot 与 JDK 版本演进:从 1.5 到 3.2 的二十年 Java 生态大事记

Spring Boot 与 JDK 版本演进:从 1.5 到 3.2 的二十年 Java 生态大事记

完整梳理 JDK 1.0 到 21 LTS、Spring Boot 1.x 到 3.x 的版本演进时间线、技术特性、版本选型建议,附官方发布日期与升级路径

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.01996-01-23Java 起点已淘汰
JDK 1.11997-02-19内部类、反射、JavaBeans已淘汰
JDK 1.21998-12-04Collections 框架、JIT、Swing已淘汰
JDK 1.32000-05-08HotSpot JVM、JavaSound已淘汰
JDK 1.42002-02-13正则、NIO、日志、XML已淘汰
JDK 1.52004-09-30泛型、注解、枚举、并发包已淘汰
JDK 1.62006-04动态语言支持、HTTP Server API已淘汰
JDK 1.72011-07-28G1 回收器、try-with-resources、菱形语法已淘汰
JDK 1.8 LTS2014-03-18Lambda、Stream、Optional、Nashorn、移除 PermGen当前生产主力
JDK 9.02017-09-21模块系统(JPMS)、JShell、HTTP/2 Client已淘汰
JDK 10.02018-03-21局部变量类型推断 var已淘汰
JDK 11 LTS2018-09-25HttpClient、ZGC(实验)、Lambda var、移除 Java EE/CORBA生产新主力
JDK 12.02019-03-19Switch 表达式(预览)已淘汰
JDK 13.02019-09-17文本块(预览)已淘汰
JDK 14.02020-03-17Records(预览)、NPE 增强提示已淘汰
JDK 15.02020-09-15ZGC + 密封类(预览)已淘汰
JDK 16.02021-03-16Records 正式已淘汰
JDK 17 LTS2021-09-15Sealed Classes 正式、Switch 模式匹配2024 当下生产主力
JDK 21 LTS2023-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 大新特性

  1. HTTP Client API 标准化(孵化多版本后正式)
  2. ZGC 可用(毫秒级 GC 暂停,4TB 堆支持)
  3. Lambda 参数 var(写 (var x, var y) -> ...
  4. 移除 Java EE / CORBA(瘦身 30%+)
  5. 飞行记录器(JFR)开放(生产可启用)

二、Spring Boot 版本演进时间线(2014-2024)

版本发布日期关键特性JDK 要求
Spring Boot 1.02014-04起步JDK 6+
Spring Boot 1.22015-01引入 starter 体系JDK 6+
Spring Boot 1.32015-11@SpringBootApplicationJDK 6+
Spring Boot 1.42016-04@SpringBootTestJDK 6+
Spring Boot 1.52017-01Kafka/Actuator 完善JDK 7+
Spring Boot 2.02018-03WebFlux、Reactive、Java 8+JDK 8+
Spring Boot 2.12018-10GraalVM(实验)、性能优化JDK 8+

2.1 Spring Boot 版本命名规则

1
2
3
4
5
6
7
8
9
Alpha:不建议使用,主要是以实现软件功能为主,通常只在软件开发者内部交流,Bug 较多;
Beta:该版本相对于α版已有了很大的改进,消除了严重的错误,但还是存在着一些缺陷,需要经过多次测试来进一步消除;
GA:General Availability,正式版本,官方推荐使用此版本,在国外都是用GA来说明release版本;
M:又叫里程碑版本,表示该版本较之前版本有功能上的重大更新;
PRE(不建议使用):预览版,内部测试版,主要是给开发人员和测试人员测试和找BUG用的;
Release:最终版本,Release不会以单词形式出现在软件封面上,取而代之的是符号®;
RC:该版本已经相当成熟了,基本上不存在导致错误的BUG,与即将发行的正式版相差无几;
SNAPSHOT:快照版,可以稳定使用,且仍在继续改进版本。
SR.X:修正版,服务版本,当项目发布积累到一定程度,需要修复该版本中的某个错误后以此来命名,X表示数字。

2.2 截至 2024-12 的版本选择

1
2
3
3.0.0(SNAPSHOT)   最少 java17   (未发布)
2.7.5(SNAPSHOT)   最少 java8    (生产)
2.6.13(SNAPSHOT)  最少 java8    (生产)

生产推荐(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)默认禁止循环引用

1
2
3
4
# application.yml
spring:
  main:
    allow-circular-references: true  # 2.6 之前隐式允许,2.6+ 默认禁止

2.7(2022-05)核心新特性

  • @AutoConfiguration 注解(替换过时的注册方式)
  • GraphQL 支持
  • Podman 支持(替代 Docker)
  • RabbitStreamTemplate 支持
  • Hazelcast 支持
  • Cache2k 支持
  • Web Server SSL 增强
  • Info 端点增强
  • 单元测试加强

三、版本选型实战建议(2024 年时点)

3.1 新项目起步

场景JDKSpring Boot
企业内部管理系统173.3
互联网电商21(虚拟线程)3.4
金融/政府强合规17(合规)3.2(稳定)
IoT 边缘计算213.4

3.2 升级路径

JDK 8 → JDK 11 升级清单

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 1. 升级构建工具
mvn -version  # 确认 Maven 3.5+

# 2. 升级依赖
<dependency>
    <groupId>javax.xml.bind</groupId>  <!-- 移除 -->
    <artifactId>jaxb-api</artifactId>
</dependency>
<!-- 替换为 -->
<dependency>
    <groupId>jakarta.xml.bind</groupId>  <!-- JDK 11+ -->
    <artifactId>jakarta.xml.bind-api</artifactId>
    <version>2.3.3</version>
</dependency>

# 3. 升级 IDE
# IntelliJ IDEA 2018.3+ 支持 JDK 11

# 4. 升级框架
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.0.RELEASE</version>
</parent>

Spring Boot 1.5 → 2.1 升级清单

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
<!-- javax → jakarta 替换 -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
</dependency>
<!-- 替换为 -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>  <!-- 升级到 4.0+ 支持 Jakarta EE -->
</dependency>

<!-- Tomcat 8 → 9 -->
<!-- Hibernate 5 → 6 -->
<!-- Thymeleaf 3 → 4 -->

3.3 监控升级

升级后必做的几件事:

  1. JVM 启动参数对比
1
2
3
4
5
# JDK 8
JAVA_OPTS="-Xms4g -Xmx4g -XX:PermSize=512m -XX:MaxPermSize=512m"

# JDK 11+(PermGen 已被移除)
JAVA_OPTS="-Xms4g -Xmx4g -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m"
  1. GC 切换
1
2
3
4
5
6
7
8
9
# JDK 8 默认
-XX:+UseParallelGC

# JDK 11 推荐(低延迟)
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200

# JDK 11 试验(超低延迟)
-XX:+UseZGC
  1. 监控接入
1
2
3
4
5
6
7
8
9
# Spring Boot 2.1 Actuator
management:
  endpoints:
    web:
      exposure:
        include: "*"
  endpoint:
    health:
      show-details: always

四、写在最后

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 生态的演进有三条主线

  1. LTS 节奏真正加速:2018 年还是"3 年一版 LTS"的预期,2024 年看是"2 年一版 LTS”(17→19→21)。企业升级窗口期被进一步压缩
  2. Spring Boot 2.6/2.7 完成了 1.x → 2.x 最后的过渡:默认禁止循环引用(2.6)、@AutoConfiguration 注解(2.7)都是为 3.0 破坏性升级铺路
  3. GraalVM 从实验变实战:2018 年 Spring Boot 2.1 提"GraalVM 实验",到 2024 年 Spring Boot 3.x + GraalVM Native Image 已成云原生部署标配
  4. JDK 8 的"超长服役"被打破:2024 年新项目几乎默认 JDK 17+,“用 JDK 8 起步"已是历史

参考资料

使用 Hugo 构建
主题 StackJimmy 设计