spring - 如何在 Spring Boot 应用程序中注入(inject) Prometheus 指标 bean?

标签 spring spring-boot kotlin prometheus

我有某些类,我想从 Prometheus Config 注入(inject) 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()
}

我不能注入(inject)这个 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 .

关于spring - 如何在 Spring Boot 应用程序中注入(inject) Prometheus 指标 bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58298391/

相关文章:

java - 如何在spring-jpa中保存基于实体的父表到子表的数据

java - 如何使用 SpringBoot 应用程序打包 Angular 项目

java - 单元测试中未执行函数

java - 为什么键显示为字符串?

android - ConstraintSet.createHorizo​​ntalChain 非法参数异常 : must have 2 or more widgets in a chain

android - 如何在 Android Kotlin 中抑制字符串常量的拼写检查?

java - Spring Boot 出现 NOT_FOUND 问题?

在 gorm/groovy 上使用 mongodb 启动时出现 springboot 初始化错误

java - Spring(-Boot) & Vaadin - 在 Vaadin 导航器中设置默认 View

java - hibernate.jdbc.time_zone = 忽略 UTC