Skip to content
首页/java/本文内容

JDK21、springoobt3、springboot-cloud-alibaba 升级记录

你好,2024!

在使用了多的 jdk1.8 之后,借助于 jdk21 虚拟线程的诱惑下,终于狠下重新以 jdk21 位基准重新搭建微服务项目。本篇文章就升级中遇到的一些问题做个总结

前言

升级前请将 idea 升级至最新版本!!!

架构说明

项目的基础架构为:

sprignboot、springboot-cloud-alibaba、nacos、sentinel

原先微服务版本为:

插件版本号
jdk1.8
springboot2.2.5.RELEASE
spring.cloudHoxton.SR3
spring-cloud-alibaba2.2.1.RELEASE

升级后架构

插件版本号
jdk21
springboot3.2.4
spring.cloud2023.0.1
spring-cloud-alibaba2022.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-plusmybatis-plus-boot-startermybatis-plus-spring-boot3-starter
sa-tokensa-token-spring-boot-startersa-token-spring-boot3-starter
dynamic-datasourcedynamic-datasource-spring-boot-startermybatis-plus-spring-boot3-starter
knife4jknife4j-openapi3-spring-boot-starterknife4j-openapi3-jakarta-spring-boot-starter
lombok1.18.281.18.32

项目代码升级

升级前升级后
import java.servletimport jakarta.servlet
import javax.validationimport jakarta.validation
import javax.annotationimport 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

alt text

问题二: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 配置

Sentinel will cause it to fail to start

alt textalt text

项目启动截图

alt text