Spring boot 如何实现自定义CompositeHealthContributor

Spring boot 如何实现自定义CompositeHealthContributor,spring-boot,spring-boot-actuator,Spring Boot,Spring Boot Actuator,我想显示以下运行状况信息: { "status":"UP", "components": { "myHealthComposite": { "status":"UP", "components": { "myFirstHealthIndicator": { "status":"UP" }, "mySeco

我想显示以下运行状况信息:

{
   "status":"UP", 
   "components": {
          "myHealthComposite": {
                "status":"UP",
                "components": {
                        "myFirstHealthIndicator": { "status":"UP" },
                        "mySecondHealthIndicator": { "status":"UP" }
                }
          }
    },
    "groups":[]
}
根据最新的Spring Boot Actuator文档,我应该使用“HealthIndicator”接口实现“MyFirstHealthIndicator”和“mySecondHealthIndicator”,并将它们与“CompositeHealthContributor”接口组合。但是对于“CompositeHealthContributor”,我需要一个借口,在文档中我找不到对我有用的东西

有人能帮我吗

问候

编辑:

myFirstHealthIndicator

@Component
public class MyFirstHealthIndicator implements HealthIndicator {

    @Override
    public Health health() {
        return Health.up().build();
    }

}
@Component
public class MySecondHealthIndicator implements HealthIndicator {

    @Override
    public Health health() {
        return Health.up().build();
    }

}
mySecondHealthIndicator

@Component
public class MyFirstHealthIndicator implements HealthIndicator {

    @Override
    public Health health() {
        return Health.up().build();
    }

}
@Component
public class MySecondHealthIndicator implements HealthIndicator {

    @Override
    public Health health() {
        return Health.up().build();
    }

}
myHealthComposite

@Component
public class MyHealthComposite implements CompositeHealthContributor {

    @Override
    public HealthContributor getContributor(String name) {
        return null;
    }

    @Override
    public Iterator<NamedContributor<HealthContributor>> iterator() {
        return null;
    }

}
@组件
公共类MyHealthComposite实现了CompositeHealthContributor{
@凌驾
public Health Contributor getContributor(字符串名称){
返回null;
}
@凌驾
公共迭代器迭代器(){
返回null;
}
}

一个非常简单且硬编码的解决方案,输出预期的结果

请从MyFirstHealthIndicatorMySecondHealthIndicator中删除
@组件
注释。否则,它们也将作为单独的组件列出

MyFirstHealthIndicator

@Component
public class MyFirstHealthIndicator implements HealthIndicator {

    @Override
    public Health health() {
        return Health.up().build();
    }

}
@Component
public class MySecondHealthIndicator implements HealthIndicator {

    @Override
    public Health health() {
        return Health.up().build();
    }

}
公共类MyFirstHealthIndicator实现HealthIndicator{
@凌驾
公共卫生(){
返回Health.up().build();
}
}
MySecondHealthIndicator

@Component
public class MyFirstHealthIndicator implements HealthIndicator {

    @Override
    public Health health() {
        return Health.up().build();
    }

}
@Component
public class MySecondHealthIndicator implements HealthIndicator {

    @Override
    public Health health() {
        return Health.up().build();
    }

}
公共类MySecondHealthIndicator实现HealthIndicator{
@凌驾
公共卫生(){
返回Health.up().build();
}
}
MyHealthComposite

@Component
public class MyHealthComposite implements CompositeHealthContributor {

    @Override
    public HealthContributor getContributor(String name) {
        return null;
    }

    @Override
    public Iterator<NamedContributor<HealthContributor>> iterator() {
        return null;
    }

}
@组件
公共类MyHealthComposite实现了CompositeHealthContributor{
私有映射参与者=新建LinkedHashMap();
MyHealthComposite(){
this.contributors.put(“myFirstHealthIndicator”,新的myFirstHealthIndicator());
this.contributors.put(“mySecondHealthIndicator”,new mySecondHealthIndicator());
}
@凌驾
public Health Contributor getContributor(字符串名称){
返回贡献者。get(名称);
}
@凌驾
公共迭代器迭代器(){
返回contributors.entrySet().stream()
.map((entry)->NamedContributor.of(entry.getKey(),entry.getValue()).iterator();
}
}
请在
应用程序.properties
中启用
管理.endpoint.health.show components=always

输出如下所示:

{
“状态”:“向上”,
“组成部分”:{
“磁盘空间”:{
“状态”:“向上”
},
“myHealthComposite”:{
“状态”:“向上”,
“组成部分”:{
“myFirstHealthIndicator”:{
“状态”:“向上”
},
“mySecondHealthIndicator”:{
“状态”:“向上”
}
}
},
“平”:{
“状态”:“向上”
}
}
}

然而,这不是我的解决方案,而是根据需求采用和调整的。

@QtRoS我不能发布一个很好的示例,因为我需要一个如何实现CompositeContributor的建议,但我希望您能处理我编辑的问题。“从最新的Spring Boot Actuator文档”您能告诉我们源代码吗(以便我们处于同一级别)?如果我需要将某些内容自动连接到
MyFirstHealthIndicator
MySecondHealthIndicator
中,并且我不想显示重复的组件,该怎么办。