zoukankan      html  css  js  c++  java
  • Spring Cloud 升级最新 Greenwich 版本,舒服了~

    640?wx_fmt=jpeg

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

    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 TrainSpring Boot Version
    Hoxton2.2.x
    Greenwich2.1.x
    Finchley2.0.x
    Edgware1.5.x
    Dalston1.5.x

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

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

    640?wx_fmt=png
    640?wx_fmt=png

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

    640?wx_fmt=png

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

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

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

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

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

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

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

    - END -

    推荐阅读:

    关注Java技术栈公众号在后台回复:Java,可获取一份栈长整理的最新 Java 技术干货。

    640

    点击「阅读原文」和栈长学更多~

  • 相关阅读:
    [转]PHP如何关闭notice级别的错误提示
    [原]php远程odbc连接sqlsvr数据库,自定义端口,命名实例的连接方式
    [原] wmic: Invalid XSL format (or) file name错误解决方法
    [转]PHP Session的一个警告
    [转]权限问题导致Nginx 403 Forbidden错误的解决方法
    [转]require(),include(),require_once()和include_once()区别
    [转]Mysql命令行常用操作
    php读取sql2000的image字段,被截断的问题
    一、基于hadoop的nginx访问日志分析---解析日志篇
    shell判断条件整理
  • 原文地址:https://www.cnblogs.com/java-stack/p/11952004.html
Copyright © 2011-2022 走看看