弹簧执行器CompositeHealthIndicator - 如何自动使用/显示/ health上的所有指示器

时间:2018-02-26 16:26:35

标签: spring-boot spring-boot-actuator

Spring是全自动魔术,我对观察HealthIndicator的运作方式感到有些惊讶。

我预计,当我在上下文中有一个HealthIndicator bean时,它会将它与其它的bean一起聚合,并在/actuator/health中生成一个摘要。取而代之的是它忽略了所有的但是我的自定义的那个。我最终实现了自己的端点聚合它们。

我一定错过了什么。要么我没有正确启用此功能(我承认它令人困惑),或者我期待的行为不是它实际应该做的事情。

我的问题:我的期望是否正确?如果是这样,我如何让它自动聚合?如果我的期望不正确,那么执行器按照我的意愿工作的惯用方法是什么?

以下是我的示例代码:

@Component
public class HelloWorldHealthIndicator implements HealthIndicator {

  @Override
  public Health health() {
    return Health.up().withDetail("hello","world").build();
  }
}
  

/致动器/健康

{
"status": "UP"
}

它也不打印"你好" :"世界"正如我所料,但那是另一回事。

这是我的自定义控制器和输出:

@RestController
public class CustomController {

  private final Map<String,HealthIndicator> indicators;

  @Autowired
  public HealthController(Map<String, HealthIndicator> indicators) {
    this.indicators = indicators;
  }

  @GetMapping("/health")
  public Health getHealth(@RequestParam("deep") Boolean deep){
    if(deep != null && deep)
      return new CompositeHealthIndicator(new OrderedHealthAggregator(),indicators).health();

    return Health.up().build();
  }
}
  

/健康?深=真

{
  "status": "UP",
  "details": {
    "helloWorldHealthIndicator": {
      "status": "UP",
      "details": {
        "hello": "world"
      }
    },
    "diskSpaceHealthIndicator": {
      "status": "UP",
      "details": {
        "total": 74865782784,
        "free": 65754009600,
        "threshold": 10485760
      }
    },
    "dbHealthIndicator": {
      "status": "UP",
      "details": {
        "database": "MySQL",
        "hello": 1
      }
    }
  }
}

0 个答案:

没有答案