【问题标题】:@ConditionalOnBean doesn't work properly with micrometer MeterRegistry@ConditionalOnBean 不能与千分尺 MeterRegistry 一起正常工作
【发布时间】:2021-01-14 17:40:53
【问题描述】:

我正在尝试使用千分尺从我的 Spring Boot 应用程序中公开指标。

以下配置由于某种原因不起作用:

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

春天说:

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)

但对于完全相同的注释配置JvmMetricsAutoConfiguration,它可以完美运行:

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

日志说:

   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)

完整示例在这里:https://filebin.net/gjxnwwksaqs1x8zg

【问题讨论】:

  • 也许改变问题以包括自动配置细节,因为这是关键部分

标签: java spring spring-boot spring-boot-actuator micrometer


【解决方案1】:

原因是缺少此自动配置的 spring.factories 定义。在spring.factories 中列出此类后,它可以按预期完美运行。

【讨论】:

    猜你喜欢
    • 2018-11-10
    • 2014-07-01
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多