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
}
}
}
}