概述
由于低版本存在一些安全漏洞,客户要求升级spring cloud和spring boot版本,索性我这边就任性地升级到最新版本,在升级过程中遇到了不少的问题,希望可以帮助同样需要升级的同学。
我这边升级的版本如下::
Spring Boot 2.3.12.REALEASE -> 2.6.7
Spring Cloud Hoxton.SR12 -> 2021.0.3
问题解决
解决编译报错问题
原因: 新版本的spring cloud中移除了hystrix相关的依赖
解决方案:
- 重新导入histrix相关的依赖。
- 引入open feign中的FallbackFactory
我们采用的是第2个方案。
启动未加载微服务bean以及bootstrap.yml
原因:
升级后的spring cloud默认不装载spring cloud相关的bean,也不加载bootstrap.yml, 导致应用无法注册以及从配置中心读取配,官方文档有提到(原文传送门)。
解决方案:
以下这个类中来判断是否启用spring cloud的源码:
- 通过系统变量或者环境变量设置spring.cloud.bootstrap.enabled为true。
- 引入下面的依赖:
<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的其他组件。
解决方案:
- 引入新的loadbalancer的jar
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency>
- 目前发现无法支持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基本考虑到了向下兼容,为了保险起见,还是尽量做下全部的回归测试。