程序员Zero
程序员Zero
Published on 2024-05-10 / 13 Visits
0
0

微服务项目Java8升级指南

​ 最近有接入SpringAI的需求,但是SpringAI要求JDK17+Springboot3,那我用的依赖版本都是从网上项目copy的,万年不变的java8,权衡一下利弊,还是升级一下吧,毕竟spring都放弃java8了,这个文章记录一下升级日志。

前置版本

  1. Java:

    • jdk8
    • maven3.8.1
  2. SpringCloud部分:

    • spring cloud版本:Hoxton.SR9
    • spring cloud alibaba:2.2.6.RELEASE
  3. SpringBoot:2.3.7.RELEASE

  4. 其他依赖

    • lombok:1.18.8
    • fastjson:1.2.83
    • druid:1.2.8
    • mysql:8.0.30
    • mybatis-plus:3.4.1
    • knife4j:4.3.0
    • openfeign:3.0.2

升级过程

  1. 根据SCA官网的表格升级spring cloud alibaba、spring cloud、springboot,版本发布说明 | https://sca.aliyun.com
<properties>
    <spring-cloud.version>2023.0.1</spring-cloud.version>
    <spring-boot.version>3.2.4</spring-boot.version>
    <spring-cloud-alibaba.version>2023.0.1.0</spring-cloud-alibaba.version>
</properties>
  1. 升级Java版本和maven编译版本直接搜索1.8全局替换即可(idea的项目jdk和模块jdk也改一下)
<properties>
    <java.version>17</java.version>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.source>17</maven.compiler.source>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <spring-cloud.version>2023.0.1</spring-cloud.version>
    <spring-boot.version>3.2.4</spring-boot.version>
    <spring-cloud-alibaba.version>2023.0.1.0</spring-cloud-alibaba.version>
</properties>
  1. 其他的就是小版本微调了,knife4j和mybatis-plus这个调成支持springboot3的
<!-- knife4j-jakarta-->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
<version>4.1.0</version>
</dependency>

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
    <version>3.5.6</version>
</dependency>

配置问题

  1. 服务注册和配置中心兼容配置

    可能会出现这个问题,但是我重启以后又没这个报错了,玄学。

Description: No spring.config.import property has been defined Action: Add a spring.config.import=nacos: property to your configuration. If configuration is not required add spring.config.import=optional:nacos: instead. To disable this check, set spring.cloud.nacos.config.import-check.enabled=false.

解决方法:

引入依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

bootstrap.yml配置注册中心地址(ps:帖子上说需要配置,但是我试了不配置也可以)

spring:
  cloud:
    config:
      enabled: true
      uri: http://127.0.0.1:8848

stackoverflow原文地址:https://stackoverflow.com/questions/67507452/no-spring-config-import-property-has-been-defined

  1. 解决spring循环依赖

    ​ 这个相信都不陌生,springboot2.6以后就默认不支持循环依赖了,如果有用到这个(比如解决事务失效问题),需要在bootstrap.yml配置文件中开启(不要在配置中心配置)

    spring:
     main:
       allow-circular-references: true
  2. openfeign版本

    低版本的openfeign不用负载均衡那个依赖,如果升级的话直接用starter的话就是最新的,引入的话这样就可以

<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>
  1. springcloud gateway升级

    从Spring Cloud 2020开始弃用了Ribbon,因此Spring Cloud Alibaba在2021版本nacos中删除了Ribbon的jar包,因此无法通过lb路由到指定微服务,出现了503情况。因此需要加入这个依赖才可以负载均衡

<!--客户端负载均衡loadbalancer-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
  1. 剩下的不影响运行就不升级了,druid我为了求稳,升到了1.2.20
  2. 24-5-12日补充,idea中maven工具升级以后启动lombok会报错
class lombok.javac.apt.LombokProcessor (in unnamed module @0x619f2afc) cannot access class com.sun.tools.javac.processing.JavacProcessingEnvironment (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.processing to unnamed module @0x619f2afc

解决方案:升级版本到1.18.30

升级后的版本

  1. Java:

    • jdk17
    • maven3.8.1
  2. SpringCloud部分:

    • spring cloud版本:2023.0.1
    • spring cloud alibaba:2023.0.1.0
  3. SpringBoot:3.2.4

  4. 其他依赖

    • lombok:1.18.30
    • fastjson:1.2.83
    • druid:1.2.20
    • mysql:8.0.30
    • mybatis-plus:3.5.6(更换包)
    • knife4j:4.1.0(更换包)
    • openfeign:3.0.2(更换成cloud-starter,具体版本是4.1.1)

    引入新的依赖

  • spring-cloud-starter-bootstrap
  • spring-cloud-starter-loadbalancer

Comment