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 基础依赖升级
- 首先把项目环境切换到Jdk17上
- 父级pom文件中
spring-boot-starter-parent
版本升级到3.3.9
项目配置中的
java.version
由8升级到17maven编译相关
maven.compiler.source
、maven.compiler.target
由8升到17由于在jdk17中移除了javax的部分包,所以很多javax.xxx都需要修改jakarta.xxx
这里主要包含:
(1) javax.servlet
(2) javax.annotation
其它javax.net,javax.sql等则继续保留着。
lombok版本由1.16.18 升级 1.18.30
3.2 相关组件升级
- redis相关
yml文件配置由spring.redis
变为spring.data.redis
,多了一级data
- mybatis plus相关
- mybatis plus版本升级,由3.5.2升级到3.5.9,pom依赖
artifactId
由mybatis-plus-boot-starter
变为mybatis-plus-spring-boot3-starter
- 分页插件剥离,新增分页依赖
com.baomidou:mybatis-plus-jsqlparser
- 多数据源依赖升级,由3.5.2升级为4.0.0,pom依赖
artifactId
由dynamic-datasource-spring-boot-starter
变为dynamic-datasource-spring-boot3-starter
- TODO:生成工具暂未调整,不确定是否有变化
对象转化工具dozer版本升级,由6.2.0升级至7.0.0
httpclient版本升级,升级至4.5.14
接口文档knife4j升级
由
com.github.xiaoymin:knife4j-spring-boot-starter:2.0.7
变更为com.github.xiaoymin:knife4j-openapi3-jakarta-spring-boot-starter:4.0.0
,Knife4jConfiguration
配置类变更
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. 升级总结
本次项目版本依赖升级大致如下,可能有一些没有记录到。
依赖 | 升级前 | 升级后 |
---|---|---|
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. 注意事项
- 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) |
- 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 |
- 我用的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