Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring启动-从未注册MeterBinder的指标_Java_Spring_Spring Boot_Spring Micrometer - Fatal编程技术网

Java Spring启动-从未注册MeterBinder的指标

Java Spring启动-从未注册MeterBinder的指标,java,spring,spring-boot,spring-micrometer,Java,Spring,Spring Boot,Spring Micrometer,情况:您在Spring Boot中通过MeterBinder注册了一个度量。它可能是自动配置的指标之一,比如jvm.gc.pause1,也可能是您自己的自定义指标。但是有一天,你启动了你的应用程序,它却不见了。它没有报告,它没有显示在执行器中,只是不见了 根本原因:可能您的代码或正在使用的库正在注入MeterRegistry。这样做有很多正当的理由,所以不要自责。但是注入MeterRegistry意味着它将在所有bean(包括可能的计量器)创建之前被创建和初始化 也有可能什么都没有注入计量系统,

情况:您在Spring Boot中通过MeterBinder注册了一个度量。它可能是自动配置的指标之一,比如
jvm.gc.pause1
,也可能是您自己的自定义指标。但是有一天,你启动了你的应用程序,它却不见了。它没有报告,它没有显示在执行器中,只是不见了

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


也有可能什么都没有注入计量系统,但出于其他原因,Spring决定在计量器之前创建它。无论发生什么情况,MeterBinder都将停止为您工作,您对此无能为力。

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

@组件
类FixMeterBinders实现BeanPostProcessor{
@自动连线
物体测量仪;
公共对象后处理后初始化(对象bean、字符串bean名称){
if(MeterBinder的bean实例){
((MeterBinder)bean.bindTo(meters.getObject());
}
返回豆;
}
}
这种方法有一个很大的缺点:如果Spring的后处理器按预期工作,每个MeterBinder将运行两次,因此您需要确保它们所做的工作是幂等的