Springboot项目由JDK8升级至JDK17详细教程

 更新时间:2025年06月11日 11:08:48   作者:笑小枫  
这篇文章主要为大家详细介绍了Springboot项目如何由JDK8升级至JDK17,本文为大家整理了全过程的详细步骤,有需要的小伙伴可以参考一下

1. 前言

最近一直想把我的开源项目maple-boot升级到jdk17版本,然后接入Spring AI。拖延症犯了一直拖拖拖,最近时间空闲较多,开始陆续着手升级。

整个升级过程 计划分为3步。

  • step1:先将项目升级到jdk17,使用正常
  • step2:生成代码的模板类升级到Jdk17对应的版本
  • step3:功能陆续验证

本文主要记录step1将项目升级过程中牵扯到依赖变动升级,当然项目用到的依赖并不算多,项目之外的这里不做记录。

2. 准备环境

原项目版本:Jdk8 + springboot 2.7.12

升级后版本:Jdk17 + springboot 3.3.9

这里新建一个maple-boot-17的项目,然后将maple-boot下[base-manage]分支的代码原封不动的复制进来。

接下来开始修改。

3. 版本升级

3.1 基础依赖升级

1.首先把项目环境切换到Jdk17上

2.父级pom文件中spring-boot-starter-parent版本升级到3.3.9

3.项目配置中的java.version由8升级到17

4.maven编译相关maven.compiler.sourcemaven.compiler.target由8升到17

5.由于在jdk17中移除了javax的部分包,所以很多javax.xxx都需要修改jakarta.xxx

这里主要包含:

(1) javax.servlet

(2) javax.annotation

其它javax.net,javax.sql等则继续保留着。

6.lombok版本由1.16.18 升级 1.18.30

3.2 相关组件升级

1.redis相关

​ yml文件配置由spring.redis 变为spring.data.redis,多了一级data

2.mybatis plus相关

  • mybatis plus版本升级,由3.5.2升级到3.5.9,pom依赖artifactIdmybatis-plus-boot-starter变为mybatis-plus-spring-boot3-starter
  • 分页插件剥离,新增分页依赖com.baomidou:mybatis-plus-jsqlparser
  • 多数据源依赖升级,由3.5.2升级为4.0.0,pom依赖artifactIddynamic-datasource-spring-boot-starter变为dynamic-datasource-spring-boot3-starter
  • TODO:生成工具暂未调整,不确定是否有变化

3.对象转化工具dozer版本升级,由6.2.0升级至7.0.0

4.httpclient版本升级,升级至4.5.14

5.接口文档knife4j升级

com.github.xiaoymin:knife4j-spring-boot-starter:2.0.7变更为com.github.xiaoymin:knife4j-openapi3-jakarta-spring-boot-starter:4.0.0Knife4jConfiguration配置类变更

package com.maple.rest.config;

import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import io.swagger.v3.oas.annotations.info.Info;
import io.swagger.v3.oas.annotations.servers.Server;
import org.springframework.context.annotation.Configuration;

/**
 * @author 笑小枫-https://www.xiaoxiaofeng.com
 * @date 2022/6/28
 */
@Configuration
@OpenAPIDefinition(
        info = @Info(title = "笑小枫管理平台接口",
                description = "管理平台 API 文档",
                version = "1.0"),
        servers = @Server(url = "https://www.xiaoxiaofeng.site/api/")
)
public class Knife4jConfiguration {

}

注解变更

变更前变更后
@Api(tags = “body参数”)@Tag(name = “body参数”)
@ApiOperation(“普通body请求”)@Operation(summary = “普通body请求”)
@ApiModel(value = “对象描述”)@Schema(description = “对象描述”)
@ApiModelProperty(“参数名称”)@Schema(description = “参数名称”)

更多的变动可以参考官网,这里暂时没有做进一步深究

4. 功能测试

大体试了下,功能都还健在,后续整理生成工具时,会陆续测试功能细节。

5. 升级总结

本次项目版本依赖升级大致如下,可能有一些没有记录到。

依赖升级前升级后
JDK817
springboot2.7.123.3.9
mybatis plus3.5.23.5.9
dynamic datasource3.5.24.0.0
lombok1.16.181.18.30
nacos0.2.102.2.3
knife4j2.0.74.0.0
httpclient4.5.134.5.14
dozer6.2.07.0.0

6. 注意事项

1.JDK版本与Spring Boot版本对应

Spring Boot不同版本支持的JDK版本如下:

Spring Boot版本支持的JDK版本
Spring Boot 2.1.xJDK 8、JDK 11
Spring Boot 2.2.xJDK 8、JDK 11
Spring Boot 2.3.xJDK 8、JDK 11
Spring Boot 2.4.xJDK 8、JDK 11
Spring Boot 2.5.xJDK 8、JDK 11
Spring Boot 2.6.xJDK 8、JDK 11
Spring Boot 2.7.xJDK 11、JDK 17
Spring Boot 3.0.xJDK 17(基于Spring Framework 6)

2.Maven版本与Spring Boot版本对应

Maven作为构建工具,与Spring Boot的兼容性如下:

Spring Boot版本推荐的Maven版本
Spring Boot 2.1.xMaven 3.5.x
Spring Boot 2.2.xMaven 3.5.x、3.6.x
Spring Boot 2.3.xMaven 3.6.x
Spring Boot 2.4.xMaven 3.6.x
Spring Boot 2.5.xMaven 3.6.x
Spring Boot 2.6.xMaven 3.6.x
Spring Boot 2.7.xMaven 3.6.x、3.8.x
Spring Boot 3.0.xMaven 3.8.x

3.我用的idea 2021.3款的,不支持过高的maven版本,我这里使用的是maven 3.8.1。条件允许建议可以换更高版本的idea,感觉2024版的使用起来也更丝滑…

7.小结

升级过程中,程序可能会出现各种各式报错,牵扯到相关依赖版本变更需要调整。

到此这篇关于Springboot项目由JDK8升级至JDK17详细教程的文章就介绍到这了,更多相关Springboot JDK版本升级内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring事务管理配置文件问题排查

    Spring事务管理配置文件问题排查

    这篇文章主要介绍了Spring事务管理配置文件问题排查,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • 浅析java消息摘要与数字签名

    浅析java消息摘要与数字签名

    这篇文章给大家分析了关于java消息摘要与数字签名的相关知识点内容,有兴趣的朋友们可以学习下。
    2018-08-08
  • java安全编码指南之:表达式规则说明

    java安全编码指南之:表达式规则说明

    这篇文章主要介绍了java安全编码指南之:表达式规则说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Java编程实现服务器端支持断点续传的方法(可支持快车、迅雷)

    Java编程实现服务器端支持断点续传的方法(可支持快车、迅雷)

    这篇文章主要介绍了Java编程实现服务器端支持断点续传的方法,涉及Java文件传输的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • JavaWeb实现Session跨页面传递数据

    JavaWeb实现Session跨页面传递数据

    本文主要介绍了 JavaWeb实现Session跨页面传递数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • springboot读取resources下文件的方式详解

    springboot读取resources下文件的方式详解

    最近写读取模板文件做一些后续的处理,将文件放在了项目的resources下,发现了一个好用的读取方法,下面这篇文章主要给大家介绍了关于springboot读取resources下文件的相关资料,需要的朋友可以参考下
    2022-06-06
  • 使用Java将一个List运用递归转成树形结构案例

    使用Java将一个List运用递归转成树形结构案例

    这篇文章主要介绍了使用Java将一个List运用递归转成树形结构案例,本文通过详细的案例来解释说明了如何去操作,需要的朋友可以参考下
    2021-06-06
  • java实现ip地址与十进制数相互转换

    java实现ip地址与十进制数相互转换

    本文介绍在java中IP地址转换十进制数及把10进制再转换成IP地址的方法及实例参考,晒出来和大家分享一下
    2012-12-12
  • Mybatis-Plus时间范围查询方式详解

    Mybatis-Plus时间范围查询方式详解

    这篇文章主要介绍了Mybatis-Plus时间范围查询方式详解,通过两种方式结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • 详解Java如何利用数字描述更多的信息

    详解Java如何利用数字描述更多的信息

    在数据库里面 ,通常我们会用数字的递进来描述状态等信息 , 但是如果想进行更复杂的操作 , 就有必要对二进制有一定理解了。本文就来趣味性的探讨一下 , 如何通过更少的空间描述更多的信息
    2022-09-09

最新评论