当前位置: 首页 > 知识库问答 >
问题:

Spring Boot执行器-自定义健康endpoint

何涵衍
2023-03-14

我正在使用SpringBoot执行器返回应用程序的运行状况。

public class HealthMonitor implements HealthIndicator {

    @Override
    public Health health() {
        int errorCode = check();
        if (errorCode != 0) {
            return Health.down().withDetail("Error Code", errorCode).build();
        }
        return Health.up().build();
    }

    public int check() {
        return 0;
    }

}

我看到了下面的回复

{
  "status": "UP",
  "diskSpace": {
    "status": "UP",
    "free": 55020113920,
    "threshold": 10485760
  },
  "db": {
    "status": "UP",
    "database": "Oracle",
    "hello": "Hello"
  }
}

我想返回一个类似于下面的响应

{status: "Healthy"}

有办法做到吗?

共有3个答案

李意致
2023-03-14

Spring Boot及其健康指标具有很大的灵活性。

首先,根据您服务的复杂性,您可能不需要上面描述的HealthIndicator。开箱即用,Spring Boot将根据您的Spring配置返回“状态”。这包括数据库(SQL和一些noSQL)、邮件、JMS和其他。最新的Spring Boot文档第47.6.1节对此进行了描述

返回所需内容的最简单方法是在application.properties中设置一个属性:

endpoints.health.sensitive=true

这可能仅适用于Spring Boot的更高版本(1.4?)。

简学文
2023-03-14

我认为您无法说服提供的Spring Boot健康终结点以完全不同的格式显示。

大多数Spring源代码都非常清晰,这也不例外。查看org.springframework.boot.actuate.endpoint.HealthEndpoint的源代码,您会发现它有一个返回Health的方法。您看到的JSON是Jackson对该对象的编组。

但是,您可以创建自己的endpoint,以与<code>HealthEndpoint,返回您自己喜欢的任何类。

您甚至可以将其委托给HealthEndpointbean

 public MyHealthEndpoint(HealthEndpoint delegate) {
     this.delegate = delegate;
 }

 @Override
 public MyHealth invoke() {
      Health health = delegate.invoke();
      return new MyHealth(health.getStatus());
 }
国晟睿
2023-03-14

要自定义您的状态消息,有一个名为:withDetail()的方法。因此,当您编写返回Health.up().build();只需将其替换为

return Health.up().withDetail("My Application Status","Healthy")

所以这会给

{My Application Status: "Healthy"}
 类似资料:
  • 因此,我将Spring引导执行器添加到我的应用程序中,并在应用程序中指定。属性管理。endpoint。健康隐藏物生存时间=120秒,以缓存健康检查结果。因此,当我调用执行器/健康时,结果被缓存,效果很好。 当我调用执行器/健康/就绪或自定义创建的组时,问题开始出现。该请求结果不会被缓存。我查阅了Spring文档,只找到了主要健康终点的信息,没有找到特定人群的信息。 所以我的问题是:我错过了什么吗?

  • 我需要改变频率来检查springboot执行器中的DB运行状况。默认DB运行状况检查查询每毫秒执行一次。我想让这个查询每1分钟后执行一次,而不是毫秒。有什么方法可以自定义它吗?

  • 我已经为我的应用程序创建了一个自定义的spring-boot执行器健康endpoint。Spring boot将所有这些自定义健康endpoint聚合到一个大的json中,并在点击application/health URL时返回它。现在,我想在点击application/health URL时,将一些信息传递给我以头的形式实现的自定义healthendpoint。我怎样才能做到这一点呢?

  • 我有一个基于SpringBoot的web应用程序,它公开了一个Consult health indicator bean。 该bean由SpringBoot的autoconfiguration正确创建和初始化,但是,尽管关联的配置属性“Management.health.consul.Enabled”设置为true,但指示器并未显示在执行器健康endpoint中: 经过进一步检查,我发现了负责获取

  • http://localhost:8080/myapp/apphealth 只需要名称更改,而不需要执行器/运行状况的响应。有可能吗?

  • 如何在SpringBoot中实现自定义endpoint以实现以下目标: 其中“Custom”是我想要实现的扩展健康的endpoint。