Reputation: 86
I am trying to expose metrics out of my spring boot application using micrometer.
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:
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:
@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
Upvotes: 1
Views: 1252
Reputation: 86
The reason was in missing spring.factories
definition for this autoconfig. After listing this class in spring.factories
it works perfectly as expected.
Upvotes: 3