Java SpringBoot:运行状况终结点缺少执政官运行状况指示器

Java SpringBoot:运行状况终结点缺少执政官运行状况指示器,java,spring,spring-boot,spring-boot-actuator,Java,Spring,Spring Boot,Spring Boot Actuator,我有一个基于SpringBoot的web应用程序,它公开了一个Consor健康指示器bean。 springboot的自动配置正确地创建和初始化了bean,但是,尽管关联的配置属性“management.health.concur.enabled”设置为true,指示器并未显示在执行器健康端点中: { "status": "UP", "components": { "Kafka": {..

我有一个基于SpringBoot的web应用程序,它公开了一个Consor健康指示器bean。
springboot的自动配置正确地创建和初始化了bean,但是,尽管关联的配置属性“management.health.concur.enabled”设置为true,指示器并未显示在执行器健康端点中:

{
   "status": "UP",
   "components": {
        "Kafka": {...},
        "SchemaRegistry": {...},
        "discoveryComposite": {...},
        "diskSpace": {...},
        "ping": {...},
        "refreshScope": {...}
    }
}
进一步检查后,我发现下面的代码段负责获取所有可用的指示符():

@Bean
@条件性缺豆
HealthContributorRegistry HealthContributorRegistry(应用上下文应用上下文,
HealthEndpointGroups(组){
Map healthContributors=新建LinkedHashMap(
applicationContext.getBeansOfType(HealthContributor.class));
if(ClassUtils.isPresent(“reactor.core.publisher.Flux”,applicationContext.getClassLoader()){
healthContributors.putAll(新的AdaptedReactiveHealthContributors(applicationContext.get());
}
返回新的自动配置HealthContributorRegistry(HealthContributs,groups.getNames());
}
在这里设置一个断点,我发现实际上在applicationContext.getBeansOfType(HealthContributor.class)调用的输出中没有列出ConsultHealthIndicator bean,如下所示:

但是,当我用父应用程序上下文测试相同的调用时,我得到以下结果:

有人能解释一下为什么这个特殊的bean出现在中而不是中吗

是否有办法强制在子上下文中对其进行初始化,以便在健康端点中正确注册

我目前正在使用

  • SpringBoot 2.3.1.1版本
  • spring cloud starter Consor all 2.2.4.1版本
先谢谢你


编辑 我已附上允许复制该问题的附件。
我还提供了一个应用程序使用的领事配置(您可以通过领事导入命令导入它)。

运行上面的示例并转到运行状况端点(localhost:8080/monitoring/health),您将清楚地看到列表中缺少领事组件。

为了使领事指示器工作,我必须提供自己的HealthContributorRegistry,在执行HealthContributor bean查找时,我会考虑父上下文:

@Bean
HealthContributorRegistry HealthContributorRegistry(
ApplicationContext应用上下文、HealthEndpointGroups组){
映射健康贡献者=
新的LinkedHashMap(applicationContext.getBeansOfType(HealthContributor.class));
ApplicationContext parent=ApplicationContext.getParent();
while(父级!=null){
healthContributors.putAll(parent.getBeansOfType(HealthContributor.class));
parent=parent.getParent();
}
返回新的DefaultHealthContributorRegistry(HealthContributs);
}

这是一个临时的解决办法,理想情况下,执政官指标应该像其他健康贡献者一样开箱即用。

为了让执政官指标发挥作用,我必须提供我自己的HealthContributorRegistry,在执行HealthContributor bean查找时,我会考虑到父上下文:

@Bean
HealthContributorRegistry HealthContributorRegistry(
ApplicationContext应用上下文、HealthEndpointGroups组){
映射健康贡献者=
新的LinkedHashMap(applicationContext.getBeansOfType(HealthContributor.class));
ApplicationContext parent=ApplicationContext.getParent();
while(父级!=null){
healthContributors.putAll(parent.getBeansOfType(HealthContributor.class));
parent=parent.getParent();
}
返回新的DefaultHealthContributorRegistry(HealthContributs);
}
这是一个临时解决办法,理想情况下,领事指标应该像其他健康贡献者一样开箱即用