Spring Cloud 升级最新 Greenwich 版本,舒服了~

简介: 这个大版本栈长是踩了非常多的坑啊,帮助了不少小伙伴。Greenwich发布也快 1 年了,栈长迟迟没有升级,距离上个大版本升级一年多了,所以栈长最近将 Spring Cloud 升级到了 Greenwich,几乎没踩多少坑,但也有坑,这里再记录分享一下,希望对你有用。

image.png这个大版本栈长是踩了非常多的坑啊,帮助了不少小伙伴。


Greenwich发布也快 1 年了,栈长迟迟没有升级,距离上个大版本升级一年多了,所以栈长最近将 Spring Cloud 升级到了 Greenwich,几乎没踩多少坑,但也有坑,这里再记录分享一下,希望对你有用。


依赖升级

升级前 => 升级后


Spring Cloud Finchley.RELEASE => Spring Cloud Greenwich.SR3


Spring Boot 2.0.2.RELEASE => Spring Boot 2.1.7.RELEASE


为什么不直接升级到 Spring Boot 2.2.x?


Spring Cloud 和 Spring Boot 兼容性请见正文表格:

image.png如果用超出版本的,兼容性会有问题。


有兴趣的可以关注栈长的微信公众号:Java技术栈,Spring Boot、Spring Cloud 干货教程及时推送。


Feign踩坑

升级后,应用启动正常,但调用 Feign 服务的时候报了个这个异常:


The bean 'SERVICE-XXX.FeignClientSpecification', defined in null, could not be registered. A bean with that name has already been defined in null and overriding is disabled.


同时日志中也给出了解决文案:


Action:


Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true


没错,就是在配置文件中配置上这个参数:


spring.main.allow-bean-definition-overriding=true

原因就是使用 @FeignClient 的时候定义了多个相同 name 的接口。

@FeignClient(name = "xxx", configuration = XXXConfig.class, fallbackFactory =
        XXXServiceFallback.class)
public interface XXXService extends IXXXService {
}

那为什么升级之后是好好的呢?


那是因为在 Spring Boot 2.1.0 之后把默认值改成了false。

image.png



而在 Spring Boot 2.1.0 之前这个值都是 true,也没有这个参数可以修改这个配置。

image.png


那这个参数到底有什么用?


正常情况下,Spring容器里面只可能有一个唯一名字的 Bean 的,如果名字相同的情况下,就要看这个参数决定了,即是否允许 Bean 覆盖,不允许情况下会抛出异常,如果允许,则谁覆盖谁要看 Spring 容器 Bean 的初始化的顺序了。


所以,配置这个参数为 true 后,多个 @FeignClient 注解相同名字的 Bean 的 configuration 参数就会被覆盖了。


如果项目中有多个 configuration,那会受影响,我们没有多个这样的配置,所以暂且先配置这个参数解决问题。解决之后,就能正常使用 Feign 了,正常访问微服务。


这难道是 Feign 的坑吗?不可能把所有东西都写在一个接口服务里面啊!暂时也没找到好的办法,后续再研究下吧。


相关文章
|
1月前
|
消息中间件 监控 Java
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
38 6
|
1月前
|
Java 关系型数据库 MySQL
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
61 5
|
1月前
|
缓存 监控 Java
如何将Spring Boot应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot应用程序部署到Pivotal Cloud Foundry (PCF)
44 5
|
3月前
|
Java 关系型数据库 开发工具
idea创建不了spring2.X版本,无法使用JDK8,最低支持JDK17 , 如何用idea创建spring2.X版本,使用JDK8解决方案
本文提供了解决方案,如何在IDEA中创建Spring 2.X版本的项目并使用JDK8,尽管Spring 2.X已停止维护且IDEA不再直接支持,通过修改pom.xml或使用阿里云的国内源来创建项目。
164 0
idea创建不了spring2.X版本,无法使用JDK8,最低支持JDK17 , 如何用idea创建spring2.X版本,使用JDK8解决方案
|
4月前
|
前端开发 Java Spring
【非降版本解决】高版本Spring boot Swagger 报错解决方案
【非降版本解决】高版本Spring boot Swagger 报错解决方案
156 2
|
6月前
|
资源调度 Java 调度
Spring Cloud Alibaba 集成分布式定时任务调度功能
Spring Cloud Alibaba 发布了 Scheduling 任务调度模块 [#3732]提供了一套开源、轻量级、高可用的定时任务解决方案,帮助您快速开发微服务体系下的分布式定时任务。
15117 33
|
6月前
|
负载均衡 Java Spring
Spring cloud gateway 如何在路由时进行负载均衡
Spring cloud gateway 如何在路由时进行负载均衡
657 15
|
5月前
|
API 开发者 Java
API 版本控制不再难!Spring 框架带你玩转多样化的版本管理策略,轻松应对升级挑战!
【8月更文挑战第31天】在开发RESTful服务时,为解决向后兼容性问题,常需进行API版本控制。本文以Spring框架为例,探讨四种版本控制策略:URL版本控制、请求头版本控制、查询参数版本控制及媒体类型版本控制,并提供示例代码。此外,还介绍了通过自定义注解与过滤器实现更灵活的版本控制方案,帮助开发者根据项目需求选择最适合的方法,确保API演化的管理和客户端使用的稳定与兼容。
228 0
|
6月前
|
Java Spring
spring cloud gateway在使用 zookeeper 注册中心时,配置https 进行服务转发
spring cloud gateway在使用 zookeeper 注册中心时,配置https 进行服务转发
139 3