<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
这将为您的应用程序添加几个有用的端点。其中之一是/健康。当您启动应用程序并导航到/ health端点时,您将看到它已返回一些数据。
{
"status":"UP",
"diskSpace": {
"status":"UP",
"free":56443746,
"threshold":1345660
}
}
如何在spring boot health中添加自定义运行状况检查?
添加自定义运行状况检查很容易。只需创建一个新的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
}
}
Spring Boot 2.X显着改变了执行器。通过@EndpointWebExtension
启用了一种新的,更好的扩展现有端点的机制。
话虽如此,健康端点的扩展有点棘手,因为它的一个扩展由执行器本身提供。如果不操作bean初始化过程,您的应用程序将无法启动,因为它将看到2个扩展,并且无法理解选择哪个。一种更简单的方法是使用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() {
不要忘记您也可以重新映射网址。在我的情况下,我更喜欢/ status to / health,并且不希望/执行器/在路径中:
management.endpoints.web.base-path=/
management.endpoints.web.path-mapping.info=status
我更喜欢/ info的另一个原因是因为我没有得到这个嵌套结构,这是/ health的默认值:
{
"status": {
"status": "ON",
自Spring Boot 2.X开始
正如@ yuranos87所述,Spring Boot 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
or @EndpointWebExtension
添加或扩展任何端点。这里的终点是info
,health
等等。因此,您可以使用@Endpoint
添加自定义运行状况检查,但使用HealthIndicator
更容易。
您可以在spring boot文档中找到有关custom health checks和custom endpoints的更多信息。