spring 如何在春 Boot 健康中添加自定义健康检查?

jyztefdp  于 2022-10-30  发布在  Spring
关注(0)|答案(3)|浏览(299)
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

这将向您的应用程序添加几个有用的终结点。其中之一是/health。当您启动应用程序并导航到/health终结点时,您将看到它已经返回了一些数据。

{
    "status":"UP",
    "diskSpace": {
        "status":"UP",
        "free":56443746,
        "threshold":1345660
    }
}

如何在春 Boot 健康中添加自定义健康检查?

wvmv3b1j

wvmv3b1j1#

添加一个自定义的健康检查很简单。只需创建一个新的Java类,从AbstractHealthIndicator扩展它,并实现doHealthCheck方法。该方法通过一些有用的方法传递一个构建器。如果你的健康状况良好,则调用builder.up(),如果不好,则调用builder.down()。你要做什么来检查健康状况完全取决于你自己。也许你想ping一些服务器或检查一些文件。

@Component
public class CustomHealthCheck extends AbstractHealthIndicator {
    @Override
    protected void doHealthCheck(Health.Builder bldr) throws Exception {
        // TODO implement some check
        boolean running = true;
        if (running) {
          bldr.up();
        } else {
          bldr.down();
        }
    }
}

这足以激活新的运行状况检查(确保@ComponentScan位于您的应用程序上)。重新启动您的应用程序并将浏览器定位到/health终结点,您将看到新添加的运行状况检查。

{
    "status":"UP",
    "CustomHealthCheck": {
        "status":"UP"
    },
    "diskSpace": {
        "status":"UP",
        "free":56443746,
        "threshold":1345660
    }
}
zkure5ic

zkure5ic2#

自Sping Boot 2.X以来

如@yuranos87所述,Sping Boot 2.X中的执行器概念已发生变化,但您仍然可以通过实现HealthIndicator或针对React式应用程序ReactiveHealthIndicator轻松添加自定义运行状况检查

@Component
public class CacheHealthIndicator implements HealthIndicator {

@Override
public Health health() {
    long result = checkSomething();
    if (result <= 0) {
        return Health.down().withDetail("Something Result", result).build();
    }
    return Health.up().build();      
  }
}

@Component
public class CacheHealthIndicator implements ReactiveHealthIndicator {

@Override
public Mono<Health> health() {
    return Mono.fromCallable(() -> checkSomething())
        .map(result -> {
            if (result <= 0) {
                return Health.down().withDetail("Something Result", result).build();
            }
            return Health.up().build();
        });
   }
}

此外,您还可以使用@Endpoint@EndpointWebExtension添加或扩展任何终结点。此处的终结点包括infohealth等。因此,您可以使用@Endpoint添加自定义运行状况检查,但使用HealthIndicator要容易得多。
您可以在Spring Boot 文档中找到有关自定义运行状况检查和自定义终结点的详细信息。
不要忘记设置应用程序属性,否则您将看不到客户运行状况指标:

management.endpoint.health.show-details=always
x3naxklr

x3naxklr3#

Sping Boot 2.X显著改变了执行器。通过@EndpointWebExtension启用了一个新的、更好的机制来扩展现有端点。
也就是说,健康端点的扩展有点棘手,因为它的一个扩展是由执行器本身提供的。如果不操纵bean初始化过程,你的应用程序将无法启动,因为它将看到两个扩展,并且不知道选择哪一个。一个更简单的方法是使用info来扩展它:

@Component
@EndpointWebExtension(endpoint = InfoEndpoint.class)
public class InfoWebEndpointExtension {
   @Value("${info.build.version}")
   private String versionNumber;
   @Value("${git.commit.id}")
   private String gitCommit;
   @Value("${info.build.name}")
   private String applicationName;
   ...
   @ReadOperation
   public WebEndpointResponse<Map> info() {

别忘了你也可以重新MapURL,在我的例子中,我更喜欢 /status 而不是 /health,并且不想在路径中使用 /actuator/

management.endpoints.web.base-path=/
management.endpoints.web.path-mapping.info=status

我更喜欢 /info 的另一个原因是我没有得到这个嵌套结构,它是 /health 的默认结构:

{
"status": {
    "status": "ON",

相关问题