【问题标题】:Ribbon: Unable to set default configuration using @RibbonClients(defaultConfiguration=...)功能区:无法使用 @RibbonClients 设置默认配置(defaultConfiguration=...)
【发布时间】:2015-08-12 15:49:25
【问题描述】:

@RibbonClients 注释允许我们自定义每个客户端的功能区配置。这个过程在http://projects.spring.io/spring-cloud/spring-cloud.html#_customizing_the_ribbon_client的文档中描述

这一切都很好。我尝试使用相同的方法来覆盖应该应用于我所有客户端的 default 配置。所以我定义了以下配置类,并确保它被组件扫描考虑:

@Configuration
@RibbonClients(defaultConfiguration = MyDefaultRibbonConfig.class)
public class MyRibbonAutoConfiguration {

}

不幸的是,在构建功能区客户端的应用程序上下文时,没有考虑到MyDefaultRibbonConfig。在RibbonClientConfigurationRegistrar 的快速查看和跟踪让我认为我的@RibbonClients(default=...) 注释被org.springframework.cloud.netflix.ribbon.eureka.RibbonEurekaAutoConfiguration 提供的注释无条件地覆盖。

但是,如果 @RibbonClients 注释设置在内部类而不是顶级类上,则它可以工作:

@Configuration
public class MyRibbonAutoConfiguration {

   @Configuration
   @RibbonClients(defaultConfiguration = MyDefaultRibbonConfig.class)
   static class SubConfig {
   }

}

这是RibbonClientConfigurationRegistrar 为发现的配置bean 命名的策略的副作用:

        registerClientConfiguration(registry,
                "default." + metadata.getEnclosingClassName(),
                attrs.get("defaultConfiguration"));

然后,在顶级类上声明的注释配置使用设置为 default.null.defaultConfiguration 的 bean 名称注册 - 因此下一个会覆盖前一个(但不确定顺序是否可预测)。

我觉得这种行为很奇怪。我错过了什么?我应该采取不同的方式吗?

【问题讨论】:

标签: spring-cloud


【解决方案1】:

这是 SpringCloud-Netflix 1.0.1 中的一个问题。请参阅https://github.com/spring-cloud/spring-cloud-netflix/issues/374 了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    • 2011-09-03
    • 1970-01-01
    • 2014-07-25
    • 1970-01-01
    • 2019-02-21
    相关资源
    最近更新 更多