Springboot项目由JDK8升级至JDK17全过程教程【文末附源码】

发布于:2025-06-14 ⋅ 阅读:(25) ⋅ 点赞:(0)

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上

image-20250610224923815

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

image-20250610225456304

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

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

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

    这里主要包含:

    (1) javax.servlet

    (2) javax.annotation

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

  4. lombok版本由1.16.18 升级 1.18.30

3.2 相关组件升级

  1. redis相关

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

image-20250610230441913

  1. 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:生成工具暂未调整,不确定是否有变化
  1. 对象转化工具dozer版本升级,由6.2.0升级至7.0.0

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

  3. 接口文档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 = “参数名称”)

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

image-20250610232535017

4. 功能测试

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

image-20250611095808540

image-20250611095929529

5. 升级总结

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

依赖 升级前 升级后
JDK 8 17
springboot 2.7.12 3.3.9
mybatis plus 3.5.2 3.5.9
dynamic datasource 3.5.2 4.0.0
lombok 1.16.18 1.18.30
nacos 0.2.10 2.2.3
knife4j 2.0.7 4.0.0
httpclient 4.5.13 4.5.14
dozer 6.2.0 7.0.0

6. 注意事项

  1. JDK版本与Spring Boot版本对应
    Spring Boot不同版本支持的JDK版本如下:
Spring Boot版本 支持的JDK版本
Spring Boot 2.1.x JDK 8、JDK 11
Spring Boot 2.2.x JDK 8、JDK 11
Spring Boot 2.3.x JDK 8、JDK 11
Spring Boot 2.4.x JDK 8、JDK 11
Spring Boot 2.5.x JDK 8、JDK 11
Spring Boot 2.6.x JDK 8、JDK 11
Spring Boot 2.7.x JDK 11、JDK 17
Spring Boot 3.0.x JDK 17(基于Spring Framework 6)
  1. Maven版本与Spring Boot版本对应
    Maven作为构建工具,与Spring Boot的兼容性如下:
Spring Boot版本 推荐的Maven版本
Spring Boot 2.1.x Maven 3.5.x
Spring Boot 2.2.x Maven 3.5.x、3.6.x
Spring Boot 2.3.x Maven 3.6.x
Spring Boot 2.4.x Maven 3.6.x
Spring Boot 2.5.x Maven 3.6.x
Spring Boot 2.6.x Maven 3.6.x
Spring Boot 2.7.x Maven 3.6.x、3.8.x
Spring Boot 3.0.x Maven 3.8.x
  1. 我用的idea 2021.3款的,不支持过高的maven版本,我这里使用的是maven 3.8.1。条件允许建议可以换更高版本的idea,感觉2024版的使用起来也更丝滑…

7.小结

升级过程中,程序可能会出现各种各式报错,牵扯到相关依赖版本变更需要调整,本文中没有出现的可以AI一下,也可以留言给我,后续会整理对应升级方案。

✨附上本文调整后的源码【maple-boot-17】https://gitee.com/hack-feng/maple-boot-17

✨jdk8 版本戳这里 -> https://gitee.com/hack-feng/maple-boot