Spring cloud Ribbon:无法使用@RibbonClient设置默认配置(defaultConfiguration=…)

Spring cloud Ribbon:无法使用@RibbonClient设置默认配置(defaultConfiguration=…),spring-cloud,Spring Cloud,@RibbonClients注释允许我们定制每个客户端的功能区配置。有关此过程的说明,请参阅 这一切都很好。我尝试使用相同的方法覆盖应该应用于所有客户端的默认配置。因此,我定义了以下配置类,并确保组件扫描考虑了它: @Configuration @RibbonClients(defaultConfiguration = MyDefaultRibbonConfig.class) public class MyRibbonAutoConfiguration { } 不幸的是,在构建功能区客户端的

@RibbonClients
注释允许我们定制每个客户端的功能区配置。有关此过程的说明,请参阅

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

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

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

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

@Configuration
public class MyRibbonAutoConfiguration {

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

}
这是一个副作用,该策略遵循
RibbonClient配置注册器
为发现的配置bean命名:

        registerClientConfiguration(registry,
                "default." + metadata.getEnclosingClassName(),
                attrs.get("defaultConfiguration"));
然后,在顶级类上声明的注释的配置将使用设置为
default.null.defaultConfiguration
的bean名称注册,因此下一个将覆盖上一个(但不确定顺序是否可预测)


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

这是SpringCloud Netflix 1.0.1中的一个问题。有关更多信息,请参阅。

有关后续信息,请参阅