JDK8升级到JDK17带来的springboot工程升级指南
·
JDK 17 是继 JDK 8 后的首个 LTS 版本,越来越多的第三方依赖包只支持JDK17,所以使用JDK17作为开发环境势在必行。
直接影响
Java EE 移交 Eclipse 基金会后更名为 Jakarta EE,包名从 javax.* 改为 jakarta.*。
仅此一项就要改动大量代码。
核心框架版本升级
| 名称 | 旧版本号 | 新版本号 |
|---|---|---|
| spring-boot | 2.3.12.RELEASE | 3.3.9 |
| spring-cloud | 2.2.9.RELEASE | 2023.0.1.2 |
spring-cloud不要使用2023.0.3.2版本,会出现一些意想不到的错误。
工具库升级
| 名称 | 旧版本号 | 新版本号 | 说明 |
|---|---|---|---|
| commons-lang3 | 3.10 | 3.17.0 | Apache Commons 工具库兼容 JDK17 |
| commons-io | 2.2 | 2.18.0 | 修复安全漏洞并兼容新 JDK |
| commons-codec | 1.11 | 1.18.0 | 支持新哈希算法 |
| hutool-all | 5.8.25 | 5.8.35 | 轻微升级,修复已知问题 |
日志组件升级
| 名称 | 旧版本号 | 新版本号 | 说明 |
|---|---|---|---|
| logback-classic | 1.2.3 | 1.5.16 | Logback 1.3+ 需 JDK 11+,兼容 JDK17 |
| log4j-to-slf4j | 2.13.3 | 2.24.3 | 修复 Log4j2 高危漏洞(如CVE-2021-44832) |
| jul-to-slf4j | 1.7.30 | 2.0.17 | SLF4J 2.x 适配 JDK17 |
数据与持久化层升级
- 数据库驱动
名称 旧版本号 新版本号 说明 mysql-connector-java 8.0.30 9.2.0 官方支持 JDK 17 com.oracle.ojdbc6 11.2.0.3 com.oracle.database.jdbc:ojdbc11:23.7.0.25.01 替换为 OracleJDBC 11+,支持 JDK 17 com.dameng.DmJdbcDriver18 8.1.3.140 8.1.3.141 达梦官方最新驱动,确认 JDK 17 兼容性 - 连接池
名称 旧版本号 新版本号 说明 com.alibaba.druid 1.2.22 1.2.24 修复 JDK 17 兼容性问题 commons-pool2 2.8.1 2.12.1 支持新特性 - MyBatis
名称 旧版本号 新版本号 说明 mybatis-spring-boot-starter 2.1.0 3.0.4 适配 Spring Boot3.x mybatis-generator-core 1.3.3 1.4.2 修复生成器兼容性 mapper-spring-boot-starter 1.2.4 5.0.1 MyBatis 通用 Mapper 最新版
JSON 与序列化
| 名称 | 旧版本号 | 新版本号 | 说明 |
|---|---|---|---|
| fastjson | 1.2.83 | 弃用→改用com.alibaba.fastjson2:2.0.56 |
FastJSON 1.x 存在安全漏洞且 JDK17 兼容性差 |
| truelicense-core | 1.33 | 4.0.0 | TrueLicense 4.x 支持 JDK17 |
XML 与 JAXB
| 名称 | 旧版本号 | 新版本号 | 说明 |
|---|---|---|---|
| jaxb-api | 2.3.1 | 弃用→改用jakarta.xml.bind-api:4.0.2 |
JDK 17 移除了 JAXB,需显式依赖 |
| jaxb-impl | 2.3.1 | 4.0.5 | JAXB 运行时实现 |
| jaxb-runtime | 2.3.1 | 4.0.5 | 替代旧版 JAXB |
| javax.activation | 1.1.1 | 弃用→改用jakarta.activation.activation-api:2.1.3和jakarta.persistence.persistence-api:3.2.0 |
Jakarta Activation 2.x |
网络与协议
| 名称 | 旧版本号 | 新版本号 | 说明 |
|---|---|---|---|
| io.netty | 4.1.99.Final | 4.1.119.Final | Netty 4.1.100+ 支持 JDK17 |
| netty-codec-http | 4.1.65.Final | 4.1.119.Final | 与 Netty 主版本同步 |
其他关键依赖
| 名称 | 旧版本号 | 新版本号 | 说明 |
|---|---|---|---|
| oshi-core | 6.3.2 | 6.7.0 | 支持新硬件信息获取 |
| bcprov-jdk18on | 1.77 | 1.80 | 支持 JDK 17 |
| lombok-mapstruct-binding | 0.2.0 | 0.2.0 | 若与 Lombok 1.18.30+ 配合使用无需升级 |
| mapstruct | 1.5.5.Final | 1.6.3 | 兼容 JDK 17 |
升级步骤建议
- 环境准备:
- 安装 JDK 17 并配置环境变量。
- 更新 IDE 的编译目标和语言级别为JDK 17。
- 依赖升级:
- 按上述表格逐步升级依赖版本。
- 优先升级 SpringBoot、Spring Cloud 和日志组件。
- 代码适配:
- 替换
javax为jakarta包名。 - 修复因依赖升级导致的API 变更(如 MyBatis、Jackson)。
- 替换
- 测试与验证:
- 运行单元测试和集成测试。
- 使用
-XX:+ShowCodeDetailsInExceptionMessages调试启动错误。
更多推荐


所有评论(0)