gpt4 book ai didi

java - Spring Boot - MeterBinder 的指标从未注册

转载 作者:行者123 更新时间:2023-11-30 05:41:15 30 4
gpt4 key购买 nike

情况:您通过 MeterBinder 在 Spring Boot 中注册了一个指标。也许它是自动配置的指标之一,例如jvm.gc.pause1,也可能是您自己的自定义指标。但有一天,当你启动你的申请时,它却不见了。它没有被报告,它没有显示在 Actuator 中,它就消失了。

根本原因:可能您正在使用的代码或库正在注入(inject) MeterRegistry。这样做有很多合理的理由,所以不要责怪自己。但是注入(inject) MeterRegistry 意味着它将在创建所有 bean(包括可能的 MeterBinder)之前创建并初始化。

也有可能没有任何东西注入(inject) MeterRegistry,但 Spring 出于某种其他原因决定在 MeterBinders 之前创建它。无论如何,MeterBinders 将停止为您工作,您对此无能为力。

最佳答案

我的解决方案是创建我自己的后处理器:

@Component
class FixMeterBinders implements BeanPostProcessor {

@Autowired
ObjectProvider<MeterRegistry> meters;

public Object postProcessAfterInitialization(Object bean, String beanName) {
if(bean instanceof MeterBinder) {
((MeterBinder)bean).bindTo(meters.getObject());
}
return bean;
}
}

这种方法有一个很大的缺点:如果 Spring 的后处理器按预期工作,每个 MeterBinder 将运行两次,因此您需要确保它们所做的工作是幂等的。

关于java - Spring Boot - MeterBinder 的指标从未注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55604886/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com