如何在 spring 启动健康中添加自定义健康检查?
How to add a custom health check in spring boot health?
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
这将为您的应用程序添加几个有用的端点。其中之一是 /health。当您启动您的应用程序并导航到 /health 端点时,您将看到它 returns 已经有一些数据。
{
"status":"UP",
"diskSpace": {
"status":"UP",
"free":56443746,
"threshold":1345660
}
}
如何在 spring 启动健康中添加自定义健康检查?
添加自定义健康检查很容易。只需创建一个新的 Java class,从 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
}
}
Spring 引导 2.X 已显着更改执行器。通过 @EndpointWebExtension
.
启用了一种新的、更好的扩展现有端点的机制
也就是说,健康端点的扩展有点棘手,因为它的一个扩展是由执行器本身开箱即用的。如果不操纵 beans 初始化过程,您的应用程序将无法启动,因为它会看到 2 个扩展并且不知道选择哪一个。
一种更简单的方法是改用信息并扩展它:
@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() {
别忘了您还可以重新映射 URL。就我而言,我更喜欢 /status 而不是 /health 并且不希望 /actuator/ 在路径:
management.endpoints.web.base-path=/
management.endpoints.web.path-mapping.info=status
我更喜欢 /info 的另一个原因是因为我没有得到这个嵌套结构,它是 /health 的默认结构:
{
"status": {
"status": "ON",
自Spring开机2.X
如@yuranos87 所述,执行器概念在 Spring 引导 2.X 中发生了变化,但您仍然可以通过实施 HealthIndicator
或反应式应用程序 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
添加或扩展 任何端点 。这里的端点是 info
、health
等等。因此,您可以使用 @Endpoint
添加自定义健康检查,但使用 HealthIndicator
.
更容易
您可以在 spring 引导文档中找到有关 custom health checks and custom endpoints 的更多信息。
如果您想要自定义状态消息,那么您可以在此处查看答案 -
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
这将为您的应用程序添加几个有用的端点。其中之一是 /health。当您启动您的应用程序并导航到 /health 端点时,您将看到它 returns 已经有一些数据。
{
"status":"UP",
"diskSpace": {
"status":"UP",
"free":56443746,
"threshold":1345660
}
}
如何在 spring 启动健康中添加自定义健康检查?
添加自定义健康检查很容易。只需创建一个新的 Java class,从 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
}
}
Spring 引导 2.X 已显着更改执行器。通过 @EndpointWebExtension
.
也就是说,健康端点的扩展有点棘手,因为它的一个扩展是由执行器本身开箱即用的。如果不操纵 beans 初始化过程,您的应用程序将无法启动,因为它会看到 2 个扩展并且不知道选择哪一个。 一种更简单的方法是改用信息并扩展它:
@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() {
别忘了您还可以重新映射 URL。就我而言,我更喜欢 /status 而不是 /health 并且不希望 /actuator/ 在路径:
management.endpoints.web.base-path=/
management.endpoints.web.path-mapping.info=status
我更喜欢 /info 的另一个原因是因为我没有得到这个嵌套结构,它是 /health 的默认结构:
{
"status": {
"status": "ON",
自Spring开机2.X
如@yuranos87 所述,执行器概念在 Spring 引导 2.X 中发生了变化,但您仍然可以通过实施 HealthIndicator
或反应式应用程序 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
添加或扩展 任何端点 。这里的端点是 info
、health
等等。因此,您可以使用 @Endpoint
添加自定义健康检查,但使用 HealthIndicator
.
您可以在 spring 引导文档中找到有关 custom health checks and custom endpoints 的更多信息。
如果您想要自定义状态消息,那么您可以在此处查看答案 -