学习
实践
活动
工具
TVP
写文章
专栏首页Java技术栈Spring Cloud 升级最新 Greenwich 版本,舒服了~

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

去年将 Spring Cloud 升级到了 Finchley 版本: Sp

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

Spring Cloud Greenwich 在 01/23/2019 这天正式发布了: Spring Cloud Greenwich 正式发布,Hystrix 即将寿终正寝!

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 兼容性请见正文表格:

Spring Cloud Train

Spring Boot Version

Hoxton

2.2.x

Greenwich

2.1.x

Finchley

2.0.x

Edgware

1.5.x

Dalston

1.5.x

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

分不清这些版本的区别和意义?可以参考栈长之前写的关于版本的文章: Spring Cloud 多版本怎么选择?

有兴趣的可以关注栈长的微信公众号: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。

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

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

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

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

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

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

未完,栈长将陆续分享 Spring Cloud 最新技术教程,现在已经写了一堆存货了,关注微信公众号 "Java技术栈" ,公众号第一时间推送!

@ All 码农们:你们升级了吗?有遇到什么样的坑?欢迎留言!

- END -

文章分享自微信公众号:
Java技术栈

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!

作者:栈长
原始发表时间:2019-11-14
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • Spring Cloud Greenwich 新特性和F升级分享

    2019.01.23 期待已久的Spring Cloud Greenwich 发布了release版本,作为我们团队也第一时间把RC版本替换为release,以...

    冷冷
  • Spring Cloud Sleuth 之Greenwich版本全攻略

    微服务架构是一个分布式架构,微服务系统按业务划分服务单元,一个微服务系统往往有很多个服务单元。由于服务单元数量众多,业务的复杂性较高,如果出现了错误和异常,很难...

    方志朋
  • Spring Cloud Consul 之Greenwich版本全攻略

    Consul是HashiCorp公司推出的开源软件,使用GO语言编写,提供了分布式系统的服务注册和发现、配置等功能,这些功能中的每一个都可以根据需要单独使用,也...

    方志朋
  • Spring Cloud Greenwich 新特性和F升级分享

    2019.01.23 期待已久的Spring Cloud Greenwich 发布了release版本,作为我们团队也第一时间把RC版本替换为release,以...

    冷冷
  • Spring Cloud Greenwich 最后一个计划版本发布!

    Spring Cloud Greenwich Service Release 5 (SR5) 发布了,可通过Maven Central 获取。

    Java技术栈
  • Spring Cloud Eureka 注册中心集群搭建,Greenwich 最新版!

    Spring Cloud 的注册中心可以由 Eureka、Consul、Zookeeper、ETCD 等来实现,这里推荐使用 Spring Cloud Eure...

    Java技术栈
  • SpringCloud 2.x学习笔记:7、Spring Cloud Bus(Greenwich版本)

    在pom.xml文件添加spring-cloud-starter-bus-amqp,完整的配置文件如下:

    程裕强
  • SpringCloud 2.x学习笔记:8、Spring Cloud Sleuth(Greenwich版本)

    从spring Cloud为F版本开始,已经不需要自己构建Zipkin Server了,只需要下载jar运行即可。

    程裕强
  • Spring Cloud 2.x学习笔记:2、feign改进(Greenwich版本)

    版权声明:本文为博主原创文章,欢迎转载。 ...

    程裕强
  • Spring Cloud 2.x完整入门Demo样例(Greenwich版本)

    版权声明:本文为博主原创文章,欢迎转载。 ...

    程裕强
  • SpringCloud 2.x学习笔记:16、Spring Cloud Gateway之限流(Greenwich版本)

    程裕强
  • Spring Cloud Tencent 1.7 版本最新发布

    导语 Spring Cloud Tencent 1.7 版本现已发布,支持 Spring Cloud Hoxton、2020、2021 版。 1 Part.1 ...

    腾讯云中间件团队
  • SpringCloud 2.x学习笔记:14、Spring Cloud Gateway路由断言工厂(Greenwich版本)

    After Route Predicate Factory,可配置一个UTC时间格式的时间参数,当请求进来的当前时间在路由断言工厂之后会成功匹配,才交给 rou...

    程裕强
  • SpringCloud 2.x学习笔记:12、Spring Cloud Gateway简单例子(Greenwich版本)

    Spring Cloud Gateway是Spring Cloud官方推出的第二代网关框架,取代Zuul网关。 Spring Cloud Gateway构建于...

    程裕强
  • SpringCloud详细教程 | 第八篇:消息总线(Spring Cloud Bus)(Greenwich版本)

    Spring Cloud Bus使用轻量级消息代理链接分布式系统的节点。然后,这可以用于广播状态改变(例如,配置改变)或其他管理指令。目前唯一的实现是使用AMQ...

    小东啊
  • SpringCloud 2.x学习笔记:13、Spring Cloud Gateway+Hystrix简单例子(Greenwich版本)

    在spring cloud gateway中可以使用Hystrix。Hystrix是 spring cloud中一个服务熔断降级的组件,在微服务系统有着十分重要...

    程裕强
  • SpringCloud详细教程 | 第九篇:服务链路追踪(Spring Cloud Sleuth)(Greenwich版本)

    微服务架构是一个分布式架构,它按业务划分服务单元,一个分布式系统往往有很多个服务单元。由于服务单元数量众多,业务的复杂性,如果出现了错误和异常,很难去定位。主要...

    小东啊
  • SpringCloud 2.x学习笔记:15、Spring Cloud Gateway之Filter过滤器(Greenwich版本)

    AddRequestHeaderGatewayFilterFactory的源码

    程裕强
  • spring cloud alibaba 组件版本关系 以及 毕业版本依赖关系

    每个 Spring Cloud Alibaba 版本及其自身所适配的各组件对应版本(经过验证,自行搭配各组件版本不保证可用)如下表所示(最新版本用*标记):

    FHAdmin

扫码关注腾讯云开发者

领取腾讯云代金券