前言
最近膨胀了,想要统一升级一下公司的架构,目前用的核心架构和版本信息如下:
- 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的版本,里面坑还是比较多的,如果依赖版本不对会出现很多奇奇怪怪的问题,并且报的错误和实际错误相差十万八千里,从发现到解决掉要走 很多弯路。