优秀的编程知识分享平台

网站首页 > 技术文章 正文

踩坑日记(十):记一次 Spring Cloud 升级到 2020 的坑

nanyue 2024-08-03 17:40:01 技术文章 8 ℃

前言

最近膨胀了,想要统一升级一下公司的架构,目前用的核心架构和版本信息如下:

  • Spring Cloud:Hoxton.SR1
  • Spring Cloud Alibaba:2.2.2.RELEAS
  • Spring Boot:2.3.7.RELEASE

架构如下

目标版本

准备升级至:

  • Spring Cloud:2020.0.3
  • Spring Cloud Alibaba:2021.1
  • Spring Boot:2.5.2

TPS:目前最新版本,在升级前担心现有代码中依赖过多,于是搭建了一套简单的demo环境。

问题一:Nacos 配置为生效

竟然没有启动起来......

报错如下:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'nacosConfigDemoConfiguration': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'user.age' in value "${user.age}"
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:405) ~[spring-beans-5.3.8.jar:5.3.8]

配置中心用的 Nacos ,竟然拉取不到测试的配置内容,并且从控制台的日志中看到连 nacos.config 相关信息都没有打印出来。

判断出没有读取到 Nacos 的相关配置,去查了一下官方更新日志。

参考链接:https://docs.spring.io/spring-cloud-config/docs/current/reference/html/#config-first-bootstrap

大概意思是说官方重构了 bootstrap 引导配置的加载方式,默认不再加载 bootstrap 配置文件, 如果要想使 bootstrap.yml 生效需要额外引入以下依赖:

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

问题二:gateway 网关 503 错误

继续查找相关文档发现 Spring Cloud 2020 也放弃了 Ribbon,并且 Spring Cloud Alibaba 2021 版本的 Nacos 中也移除了 Ribbon 支持,导致无法通过 lb 路由指定到相关的微服务,就出现 503 异常。

想要解决问题,也需要额外引入 Spring Cloud Loadbalancer 依赖:

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

问题三:引入的组件报错

这个问题就不一一列举了,找到了一份 Spring Cloud Alibaba 提供的一份组件版本关系对照表,小伙伴们可以去参考:

毕业版本推荐使用

总结

建议大家在升级前需要先查一查 Spring Cloud 和 Spring Cloud Alibaba的版本,里面坑还是比较多的,如果依赖版本不对会出现很多奇奇怪怪的问题,并且报的错误和实际错误相差十万八千里,从发现到解决掉要走 很多弯路。

最近发表
标签列表