@RibbonClients
注释允许我们为每个客户端自定义功能区配置。此过程在http://projects.spring.io/spring-cloud/spring-cloud.html#_customizing_the_ribbon_client
这一切都很好。我尝试使用相同的方法来覆盖应该应用于所有客户端的默认配置。所以我定义了以下配置类,并确保它被组件扫描考虑:
@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名称进行注册 - 因此下一个注册将覆盖前一个(不确定顺序是否可预测)。
这种行为对我来说很奇怪。我错过了什么?我应该采用不同的方式吗?
答案 0 :(得分:0)
这是SpringCloud-Netflix 1.0.1中的一个问题。有关详细信息,请参阅https://github.com/spring-cloud/spring-cloud-netflix/issues/374。