问题描述
我们在基础结构模型中有一个样本执行器运行状况检查,这是我们在主要服务中使用的(向程序包添加依赖项,@ Import类名等)。
我们通过添加后缀 /actuator/health
来了解http端点,以下是结果:
{
"status": "UP","components": {
"com......DbServiceValidator": {
"status": "UP"
},"com......StorageServiceValidator": {
"status": "UP"
},"diskSpace": {
"status": "UP","details": {
"total": 505370734592,"free": 362675372032,"threshold": 10485760,"exists": true
}
},"ping": {
"status": "UP"
}
}
}
但是我们想从Java代码中以编程方式获取所有这些数据。 我做了一些研究,但一无所获。
是否可以直接从代码中获取数据(/ json)(无需休息等)?
解决方法
Spring Boot会自动配置一些名为HealthIndicators
,完整列表here的bean。
应该可以像这样使用它:
@Autowired
DiskSpaceHealthIndicator diskSpaceHealthIndicator;
void getDiskStatus() {
logger.info("Current Disk status {}",diskSpaceHealthIndicator.health().getStatus());
}
编辑:
受@MarkBramnik的回答启发,我验证了可以注入HealthEndpoint
并将结果打印为JSON:
@Autowired
private HealthEndpoint healthEndpoint;
public void printHealthStatus() {
ObjectMapper mapper = new ObjectMapper();
log.info(mapper.writeValueAsString(healthEndpoint.health().getStatus()));
// output is: {"status":"UP"}
}
,
总而言之,您可以遵循以下策略:
-
使用JMX。除了REST之外,Spring Boot执行器还可以通过JMX公开端点。 参见the documentation。因此,您可以编写代码以编程方式访问“健康” mbean并获取汇总信息。
-
尝试将
HealthEndpoint
(应该是一个bean,尽管我从来没有尝试过)到您的类中,并通过直接从服务器调用对象来获取有关运行状况的信息(就好像它是常规类一样)-您将获得逻辑上表示JSon信息的对象。运行状况端点的源代码可用here