最近有接入SpringAI的需求,但是SpringAI要求JDK17+Springboot3,那我用的依赖版本都是从网上项目copy的,万年不变的java8,权衡一下利弊,还是升级一下吧,毕竟spring都放弃java8了,这个文章记录一下升级日志。
前置版本
-
Java:
- jdk8
- maven3.8.1
-
SpringCloud部分:
- spring cloud版本:Hoxton.SR9
- spring cloud alibaba:2.2.6.RELEASE
-
SpringBoot:2.3.7.RELEASE
-
其他依赖
- 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
升级过程
- 根据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>
- 升级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>
- 其他的就是小版本微调了,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>
配置问题
-
服务注册和配置中心兼容配置
可能会出现这个问题,但是我重启以后又没这个报错了,玄学。
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
-
解决spring循环依赖
这个相信都不陌生,springboot2.6以后就默认不支持循环依赖了,如果有用到这个(比如解决事务失效问题),需要在bootstrap.yml配置文件中开启(不要在配置中心配置)
spring: main: allow-circular-references: true
-
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>
-
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>
- 剩下的不影响运行就不升级了,druid我为了求稳,升到了1.2.20
- 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
升级后的版本
-
Java:
- jdk17
- maven3.8.1
-
SpringCloud部分:
- spring cloud版本:2023.0.1
- spring cloud alibaba:2023.0.1.0
-
SpringBoot:3.2.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
文章评论
Very good article! We are linking to this great post on our website.
Keep up the good writing.
Very useful information specifically the last part I care for
such information a lot. I was seeking this particular info
for a long time. Thank you and best of luck.thanks