spring - 如何在 Spring Boot 应用程序中注入 Prometheus 指标 bean?
问题描述
我有某些类,我想从 Prometheus Config 注入 bean 作为构造函数参数。
@Component
class Foo(
private val counterMetric: Metric
) {
}
@Component
class Bar(
private val counterMetric: Metric
) {
}
@Configuration
class PrometheusConfig {
@Bean
fun counterMetric() = Counter.build()
.name("invite_requests")
.help("Number of invite requests")
.labelNames("method")
.register()
}
我不能注入这个 bean,因为 Spring Boot 有 @PrometheusMetricsExportAutoConfiguration 注解。我该如何处理?
Caused by: org.springframework.beans.factory.support.BeanDefinitionOverrideException: Invalid bean definition with name 'prometheusConfig' defined in class path resource [org/springframework/boot/actuate/autoconfigure/metrics/export/prometheus/PrometheusMetricsExportAutoConfiguration.class]: Cannot register bean definition [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.actuate.autoconfigure.metrics.export.prometheus.PrometheusMetricsExportAutoConfiguration; factoryMethodName=prometheusConfig; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/actuate/autoconfigure/metrics/export/prometheus/PrometheusMetricsExportAutoConfiguration.class]] for bean 'prometheusConfig': There is already [Generic bean: class [kz.btsd.messenger.calls.config.PrometheusConfig]; scope=singleton; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in file [/home/nurbol/BTSDigital/mess-calls/mess-calls-app/build/classes/kotlin/main/kz/btsd/messenger/calls/config/PrometheusConfig.class]] bound.
at org.springframework.beans.factory.support.DefaultListableBeanFactory.registerBeanDefinition(DefaultListableBeanFactory.java:893)
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForBeanMethod(ConfigurationClassBeanDefinitionReader.java:274)
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:141)
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:117)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:327)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:232)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:275)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:95)
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:705)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:531)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:742)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:389)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:311)
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:119)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:99)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:117)
... 73 more
解决方案
已注册PrometheusConfig
班级,请重命名为其他名称,例如PrometheusConfiguration
.
推荐阅读
- javascript - 在 ES6 中附加动态变量
- python - 使用 pyMannKendall python 包测试网格化降雨数据的趋势
- java - 在反应式编程中如何优雅地关闭数据库连接池中的连接
- python - 从文本列 NLTK 中提取人名
- django - 如何以特定格式正确序列化
- node.js - Express 服务器 - 通过 res.sendFile() 发送的图像不是 base64 编码的吗?应该是吗?
- python - 将 jsonpickle 用于可串行对象时如何删除 py/object
- java - 循环中有一些问题,如果可能,它会重复 12 次帮助
- amazon-web-services - 使用 AWS MediaTailor 替换 VOD 广告
- web-services - 不同类型的网络服务