专栏首页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技术栈(javastack),作者:栈长

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 最新 Spring 系列教程,都在这了!

    以下是Java技术栈微信公众号发布的关于 Spring/ Spring MVC/ Spring Boot/ Spring Cloud 的技术干货,本文长期更新,...

    Java技术栈
  • Spring Cloud Finchley 正式发布,包含 4 个重大更新!

    在 Spring 的官方博客上已经看到 Spring Cloud Finchley 在 06 月 19 日这一天正式发布了,我们在 Maven 中央仓库也看到了...

    Java技术栈
  • Spring面试题(第一期)

    Spring作为现在最流行的java web开发框架,Spring的应用及其原理的深入了解是每个Java开发程序员必经之路,下面10道面试题是Java开发程序员...

    Java技术栈
  • SSHM(SPRING+STRUTS+MYBATIS+HIBERNATE)书籍介绍

    持久化——数据在程序实例之外留存的功能——是现代应用程序的核心。Hibernate是最流行的Java持久化工具,提供了自动且透明的对象/关系映射,使得在Java...

    用户5224393
  • Spring In Action 4(Spring实战第四版)翻译与理解 第一章 付诸行动

            这几天笔者阅读了一下Spring In Action 4,感觉还是有一定的收获的。在之前的项目上,只会简单地使用Spring MVC,对于很多概...

    Gaussic
  • 面试官:关于Spring就问这13个

    一句话概括:Spring是一个轻量级、非入侵式的控制反转(IoC)和面向切面(AOP)的框架。

    Java识堂
  • 掌握13个Spring核心技术点,面试再也不会被面试官吊打!

    Spring 框架现在已经越来越受欢迎,你可以错过其他框架,但 Spring 一定不能错过!

    Java程序猿
  • 高频Spring面试题你能答对几个?

    Spring 框架,作为一个非常优秀的轻量级容器,在企业级项目开发中非常受欢迎,Spring 框架也早已成为 Java 后端开发事实上的行业标准,如何用好 Sp...

    java思维导图
  • 有网友说:2020年还不懂Spring就放弃Java吧?

    Spring这个词对于开发者想必不会陌生,可能你每天都在使用Spring,享受着Spring生态提供的服务,理所当然的用着SpringIOC和SpringAOP...

    程序员追风
  • 对于Spring,只会 20%,那也太菜了!

    从事 Java相关开发的朋友,应该没有不知道 Spring的,但是80%的人,只了解 Spring 20%的用法,这也就是大家常说的二八定律。

    Java技术栈

扫码关注云+社区

领取腾讯云代金券