JDK21、springoobt3、springboot-cloud-alibaba 升级记录
你好,2024!
在使用了多的 jdk1.8 之后,借助于 jdk21 虚拟线程的诱惑下,终于狠下重新以 jdk21 位基准重新搭建微服务项目。本篇文章就升级中遇到的一些问题做个总结
前言
升级前请将 idea 升级至最新版本!!!
架构说明
项目的基础架构为:
sprignboot、springboot-cloud-alibaba、nacos、sentinel
原先微服务版本为:
插件 | 版本号 |
---|---|
jdk | 1.8 |
springboot | 2.2.5.RELEASE |
spring.cloud | Hoxton.SR3 |
spring-cloud-alibaba | 2.2.1.RELEASE |
升级后架构
插件 | 版本号 |
---|---|
jdk | 21 |
springboot | 3.2.4 |
spring.cloud | 2023.0.1 |
spring-cloud-alibaba | 2022.0.0.0-RC2 |
<properties>
<java.version>21</java.version>
<spring-boot.version>3.2.4</spring-boot.version>
<spring-cloud-alibaba.version>2022.0.0.0-RC2</spring-cloud-alibaba.version>
<spring-cloud.version>2023.0.1</spring-cloud.version>
<swagger.version>1.6.2</swagger.version>
<knife4j.version>4.3.0</knife4j.version>
<sa-token.version>1.37.0</sa-token.version>
<hutool.version>5.8.20</hutool.version>
<lombok.version>1.18.32</lombok.version>
<mybatis-plus.version>3.5.5</mybatis-plus.version>
</properties>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-sentinel-datasource</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
<!--服务调用-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-okhttp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<!-- swagger 帮助文档 -->
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
<version>${knife4j.version}</version>
</dependency>
<!-- Sa-Token 整合 Redis (使用 jackson 序列化方式) -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-redis-jackson</artifactId>
<version>${sa-token.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<!--hutool工具包-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
插件升级
插件 | 升级前 | 升级后 |
---|---|---|
mybatis-plus | mybatis-plus-boot-starter | mybatis-plus-spring-boot3-starter |
sa-token | sa-token-spring-boot-starter | sa-token-spring-boot3-starter |
dynamic-datasource | dynamic-datasource-spring-boot-starter | mybatis-plus-spring-boot3-starter |
knife4j | knife4j-openapi3-spring-boot-starter | knife4j-openapi3-jakarta-spring-boot-starter |
lombok | 1.18.28 | 1.18.32 |
项目代码升级
升级前 | 升级后 |
---|---|
import java.servlet | import jakarta.servlet |
import javax.validation | import jakarta.validation |
import javax.annotation | import jakarta.annotation |
配置文件升级
redis
yml 文件中由 spring.redis 改为 spring.data.redis
遇到的问题及解决方案
问题一:Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,b 解决方案: 在 idea 启动主类时添加参数: --add-opens java.base/java.lang=ALL-UNNAMED
问题二:Class xxxFeign has annotations [FeignClient] that are not used by contract Default
出现场景:一开始以为是升级springboot cloud 版本之后,feign的写法也需要进行变更,经过长时间的全网搜索之后并未找到合适的解决方案。
最后在一篇关于 Spring Boot 3.2. x version Sentinel will cause it to fail to start 的issues中偶然发现了,可以通过重写SentinelInvocationHandler方法来解决异常调用问题
git地址:
Sentinel will cause it to fail to start