升级到Spring Cloud 2021.0.3 常见问题

737 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第19天,点击查看活动详情

概述

由于低版本存在一些安全漏洞,客户要求升级spring cloud和spring boot版本,索性我这边就任性地升级到最新版本,在升级过程中遇到了不少的问题,希望可以帮助同样需要升级的同学。

我这边升级的版本如下::

Spring Boot 2.3.12.REALEASE -> 2.6.7

Spring Cloud Hoxton.SR12 -> 2021.0.3

问题解决

解决编译报错问题

原因: 新版本的spring cloud中移除了hystrix相关的依赖

解决方案:

  1. 重新导入histrix相关的依赖。
  2. 引入open feign中的FallbackFactory

我们采用的是第2个方案。

启动未加载微服务bean以及bootstrap.yml

原因:

升级后的spring cloud默认不装载spring cloud相关的bean,也不加载bootstrap.yml, 导致应用无法注册以及从配置中心读取配,官方文档有提到(原文传送门)。

解决方案:

以下这个类中来判断是否启用spring cloud的源码:

  1. 通过系统变量或者环境变量设置spring.cloud.bootstrap.enabled为true。
  2. 引入下面的依赖:
 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>

我们选择的是方案2。

No Feign Client for loadBalancing defined

原因:

新版本的spring cloud 移除了对ribbon的支持,众所周知,netflix以及停止维护了,所有新版本的spring cloud去除了处eureka的其他组件。

解决方案:

  1. 引入新的loadbalancer的jar
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
  1. 目前发现无法支持ribbon, 引入ribbon的报会报如下的错误。

Bean循环引用报错

高版本spring boot默认禁止bean的循环引用。

解决方案:

配置文件中添加如下的配置:

spring.main.allow-circular-references: true

配置检查更新

升级到新功能版本时,某些属性可能已重命名或删除。Spring Boot 提供了一种在启动时分析应用程序环境和打印诊断信息的方法,还可以在运行时为您临时迁移属性。要启用该功能,请将以下依赖项添加到您的项目中:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-properties-migrator</artifactId>
    <scope>runtime</scope>
</dependency>

可以看到发生变化的配置如下:

完成迁移后,请确保从项目的依赖项中删除此模块。

总结

整体来说,升级还是相对顺利的,spring基本考虑到了向下兼容,为了保险起见,还是尽量做下全部的回归测试。