简体   繁体   English

@ConditionalOnBean 不能与千分尺 MeterRegistry 一起正常工作

[英]@ConditionalOnBean doesn't work properly with micrometer MeterRegistry

I am trying to expose metrics out of my spring boot application using micrometer.我正在尝试使用千分尺从我的 spring 引导应用程序中公开指标。

Following configuration didn't work for some reason:由于某种原因,以下配置不起作用:

@Configuration(proxyBeanMethods = false)
@AutoConfigureAfter({ MetricsAutoConfiguration.class, CompositeMeterRegistryAutoConfiguration.class })
@ConditionalOnClass(MeterRegistry.class)
@ConditionalOnBean(MeterRegistry.class)
public class SuperTestAutoConfig {
    @Bean
    public Object testBean() {
        return new Object();
    }
}

Spring says: Spring 说:

SuperTestAutoConfig:
      Did not match:
         - @ConditionalOnBean (types: io.micrometer.core.instrument.MeterRegistry; SearchStrategy: all) did not find any beans of type io.micrometer.core.instrument.MeterRegistry (OnBeanCondition)
      Matched:
         - @ConditionalOnClass found required class 'io.micrometer.core.instrument.MeterRegistry' (OnClassCondition)

But for absolutely the same annotated configuration JvmMetricsAutoConfiguration it works perfectly:但是对于完全相同的注释配置JvmMetricsAutoConfiguration它可以完美运行:

@Configuration(proxyBeanMethods = false)
@AutoConfigureAfter({ MetricsAutoConfiguration.class, CompositeMeterRegistryAutoConfiguration.class })
@ConditionalOnClass(MeterRegistry.class)
@ConditionalOnBean(MeterRegistry.class)
public class JvmMetricsAutoConfiguration {}

Log says:日志说:

   JvmMetricsAutoConfiguration matched:
      - @ConditionalOnClass found required class 'io.micrometer.core.instrument.MeterRegistry' (OnClassCondition)
      - @ConditionalOnBean (types: io.micrometer.core.instrument.MeterRegistry; SearchStrategy: all) found bean 'prometheusMeterRegistry' (OnBeanCondition)

Fully example is here: https://filebin.net/gjxnwwksaqs1x8zg完整的例子在这里: https://filebin.net/gjxnwwksaqs1x8zg

The reason was in missing spring.factories definition for this autoconfig.原因是缺少此自动配置的spring.factories定义。 After listing this class in spring.factories it works perfectly as expected.在 spring.factories 中列出此spring.factories后,它可以按预期完美运行。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM