2016-08-15 229 views
0

我使用SpringBoot驱动程序来返回应用程序的健康状况。Spring Boot Actuator - 自定义健康端点

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

有没有办法做到这一点的回应?

+0

而不是返回'Health'实例返回检查后,您的自定义响应'errorCode' – 11thdimension

+0

我不该在这种情况下实施HealthIndicator的?有没有办法像我提到的使用Health实例一样返回自定义消息? –

+0

我以为'健康'是一些正常的班级。我自己尝试过,现在唯一的办法就是保护这个服务免受外部使用,并创建一个像'/ customHealth'这样的定制服务,并在服务器上使用这个'/ health'服务来获取定制中的状态信息服务。 – 11thdimension

回答

-2

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

首先,根据您服务的复杂程度,您可能不需要上述的HealthIndicator。开箱即用,Spring Boot将根据您的弹簧配置返回状态。这包括数据库(SQL和一些noSQL),邮件,JMS和其他。这是在最新的Spring引导文件中section 47.6.1

最简单的方式描述返回你想要什么,有或没有HealthIndicator类,是设置在application.properties属性:

endpoints.health。 sensitive = true

这可能只适用于Spring Boot的更高版本(1.4之后)。

0

我不认为你将能够说服提供的Spring Boot健康端点以显着不同的格式显示。

大部分Spring的源代码都很清晰,这也不例外。看看org.springframework.boot.actuate.endpoint.HealthEndpoint的来源,你会发现它有一个invoke()方法返回Health。你看到的JSON是杰克逊对那个对象的编组。

但是,您可以创建自己的端点,并以与HealthEndpoint完全相同的方式来扩展AbstractEndpoint,并返回您喜欢的任何类别。

你甚至可以让它委托给HealthEndpoint豆:

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

@Override 
public MyHealth invoke() { 
     Health health = delegate.invoke(); 
     return new MyHealth(health.getStatus()); 
} 
相关问题