【问题标题】:Brixton.M4 + zuul: Expected single matching bean but found 2: dropwizardMetricServices,servoMetricServicesBrixton.M4 + zuul:预期单个匹配 bean,但找到 2:dropwizardMetricServices,servoMetricServices
【发布时间】:2016-02-05 14:15:39
【问题描述】:

我正在尝试将基于 Spring Boot + Spring Cloud 的项目升级到 Brixton.M4,因为 zuul 在与 SC 的 Brixton.M3 打包的版本中缺乏对 PATCH (https://github.com/spring-cloud/spring-cloud-netflix/issues/412) 的支持。 我启用了 spring-boot-starter-actuator 和 spring-cloud-starter-zuul 等,但现在容器无法启动并出现以下错误:

No qualifying bean of type [org.springframework.boot.actuate.metrics.CounterService] is defined:
expected single matching bean but found 2: dropwizardMetricServices,servoMetricServices

更多堆栈跟踪:

 Could not autowire field: private org.springframework.boot.actuate.metrics.CounterService org.springframework.boot.actuate.autoconfigure.MetricFilterAutoConfiguration.counterService; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: 
No qualifying bean of type [org.springframework.boot.actuate.metrics.CounterService] is defined: expected single matching bean but found 2: dropwizardMetricServices,servoMetricServices
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:573)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)
... 34 more 
Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [org.springframework.boot.actuate.metrics.CounterService] is defined: expected single matching bean but found 2: dropwizardMetricServices,servoMetricServices
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1126)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:545)
... 36 more

类路径中确实有两个 CounterService 类型的 bean:Spring-boot-actuator-1.3.1.RELEASE.jar 中的 DropwizardMetricServices 和 spring-cloud-netflix-core-1.1.0.M4.jar 中的 ServoMetricServices

有没有办法禁用其中之一?我检查了文档,但找不到任何明显的方法。

谢谢!

【问题讨论】:

    标签: spring-cloud netflix netflix-zuul


    【解决方案1】:

    对上述答案的小修复

    @Bean
    @Primary
    public DropwizardMetricServices dropwizardMetricServices(MetricRegistry metricRegistry){
        return new DropwizardMetricServices(metricRegistry);
    }
    

    【讨论】:

      【解决方案2】:

      您可以在您的 java 配置文件中使用 @Primary,如下所示:

      @Bean
      @Primary
      public DropwizardMetricServices dropwizardMetricServices(){
          return new DropwizardMetricServices();
      }
      

      【讨论】:

        猜你喜欢
        • 2016-04-12
        • 2018-04-22
        • 2016-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-06
        • 1970-01-01
        • 2017-12-11
        相关资源
        最近更新 更多