| 失效链接处理 |
|
为什么从 SpringBoot 3 开始,彻底放弃 “ JDK 8 ” ?
相关截图:
![]() 主要内容:
一、先说结论:不是"不想兼容",而是"没法再兼容"
Spring Boot 3 基于 Spring Framework 6,而 Spring 6 的底层已经全面切换到 Jakarta EE 9+(原来的 javax.* 包名改成了 jakarta.*)。这套新标准,JDK 8 根本跑不起来。
所以这不是"Spring 团队嫌 JDK 8 老",而是一条清晰的因果链:
二、Spring Boot 3 为什么必须告别 JDK 8?
1. JDK 8 真的"老了"
Oracle 对 JDK 8 的免费公开更新早在 2019 年 1 月就结束了。这意味着:
安全补丁要靠商业支持或第三方发行版(如 Adoptium、Amazon Corretto)
新语言特性(Records、Sealed Classes、Pattern Matching 等)全部用不了
社区生态(包括 Spring、Hibernate、Tomcat 10+)已经集体向前走了
继续死守 JDK 8,等于主动放弃后续的安全修复和生态红利。
2. Jakarta EE 改名,牵一发动全身
Java EE 在 2017 年捐给 Eclipse 基金会后,因商标问题,所有 javax.* 包名必须改成 jakarta.*。这不是简单的"查找替换"——Servlet、JPA、Validation 等核心 API 的坐标和包名都变了。
Spring Boot 3 内置的是 Tomcat 10+、Hibernate 6,它们只认 Jakarta 命名空间。JDK 8 时代的 javax.servlet 在这里已经不存在了。
3. 维护两套代码,成本太高
如果 Spring Boot 3 还要兼容 JDK 8,团队就得同时维护 javax 和 jakarta 两套分支,测试矩阵翻倍,Bug 修复也要做两遍。对于 Spring 这样体量的框架来说,不现实,也没必要。
4. 为什么选 JDK 17 而不是 11?
JDK 11 是 LTS,JDK 17 也是 LTS,而且 17 包含了 11 之后积累的大量实用特性(Records、Sealed Classes、Text Blocks 等)。Spring 团队选 17 作为基线,等于给开发者一个"一次升级,用很多年"的安心感。
|


苏公网安备 32061202001004号
