Spring Boot执行器-Java端点

问题描述

我们在基础结构模型中有一个样本执行器运行状况检查,这是我们在主要服务中使用的(向程序包添加依赖项,@ 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"}
}
,

总而言之,您可以遵循以下策略:

  1. 使用JMX。除了REST之外,Spring Boot执行器还可以通过JMX公开端点。 参见the documentation。因此,您可以编写代码以编程方式访问“健康” mbean并获取汇总信息。

  2. 尝试将HealthEndpoint(应该是一个bean,尽管我从来没有尝试过)到您的类中,并通过直接从服务器调用对象来获取有关运行状况的信息(就好像它是常规类一样)-您将获得逻辑上表示JSon信息的对象。运行状况端点的源代码可用here