如何使用 Spring Boot Actuator 创建多个健康检查端点
How to create more than one health check endpoints with Spring Boot Actuator
我想做什么
- 使用 Spring Boot Actuator
创建两个(不同的)端点
我的环境
- Spring 引导 1.4.2
- spring-boot-starter-actuator 嵌入 Spring Boot 1.4.2
详情
我正在使用 Spring Boot 创建 Web 应用程序,需要创建两个独立的端点:一个仅用于检查应用程序的运行状况,包括应用程序的数据库连接等(这将默认实现“/health”)的行为,另一个只是检查应用程序是否准备好接受 HTTP 请求(比如“/httpcheck”)。
要实现健康检查功能,我想这是使用 Spring Boot Actuator 的最快方法(默认情况下,/health 映射到健康检查端点)。
我也明白我们可以通过扩展 AbstractHealthIndicator 来配置这个端点(这样它将包括数据库健康检查)。
但据我所知,我找不到一种方法来创建多个端点来执行不同的健康检查。
你有什么想法吗?
提前致谢。
解决方案
- 您可以在 Spring-boot 应用程序中使用 Jolokia 端点,并将其与执行器插件一起注册到 o.s.b.a.e.jmx.EndpointMBeanExporter。
<dependency>
<groupId>org.jolokia</groupId>
<artifactId>jolokia-core</artifactId>
<version>1.2.2</version>
</dependency>
application.properties
中的 Jolokia 配置
jolokia.config.debug=true
endpoints.jolokia.enabled=true
感谢您的回答。
实际上,我通过实现一个新端点 (/httpcheck) 来简单地检查它的 HTTP 堆栈是否正常工作来处理这个问题。
HttpCheckEndpoint.java
@Component
@ConfigurationProperties(prefix = "endpoints.httpcheck") // Specifies the prefix on application.yml
public class HttpCheckEndpoint extends AbstractMvcEndpoint {
public HttpCheckEndpoint() {
super("/httpcheck", false);
}
/**
* Check if simply the app can connect to their own HTTP stack and return 200 OK.
* <ul>
* <li>Method: GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS</li>
* <li>Endpoint: "/httpcheck"</li>
* </ul>
*/
@RequestMapping
@ResponseBody
public ResponseEntity<String> checkHttpConnecton() {
if (!isEnabled()) {
return new ResponseEntity<String>("", HttpStatus.NOT_FOUND);
} else {
return new ResponseEntity<String>("{\"status\": \"UP\"}", HttpStatus.OK);
}
}
}
application.yml
endpoints:
enabled: false # Default enabled/disabled on endpoints on Spring Boot Actuator
health: # Health check (already prepared in Spring Boot Actuator)
enabled: true
httpcheck: # Simple HTTP connection check (newly created by myself)
enabled: true
我已经确认它运行良好,但不确定它是否是最佳解决方案...
我想做什么
- 使用 Spring Boot Actuator 创建两个(不同的)端点
我的环境
- Spring 引导 1.4.2
- spring-boot-starter-actuator 嵌入 Spring Boot 1.4.2
详情
我正在使用 Spring Boot 创建 Web 应用程序,需要创建两个独立的端点:一个仅用于检查应用程序的运行状况,包括应用程序的数据库连接等(这将默认实现“/health”)的行为,另一个只是检查应用程序是否准备好接受 HTTP 请求(比如“/httpcheck”)。
要实现健康检查功能,我想这是使用 Spring Boot Actuator 的最快方法(默认情况下,/health 映射到健康检查端点)。 我也明白我们可以通过扩展 AbstractHealthIndicator 来配置这个端点(这样它将包括数据库健康检查)。
但据我所知,我找不到一种方法来创建多个端点来执行不同的健康检查。 你有什么想法吗?
提前致谢。
解决方案
- 您可以在 Spring-boot 应用程序中使用 Jolokia 端点,并将其与执行器插件一起注册到 o.s.b.a.e.jmx.EndpointMBeanExporter。
<dependency> <groupId>org.jolokia</groupId> <artifactId>jolokia-core</artifactId> <version>1.2.2</version> </dependency>
application.properties
中的 Jolokia 配置jolokia.config.debug=true endpoints.jolokia.enabled=true
感谢您的回答。 实际上,我通过实现一个新端点 (/httpcheck) 来简单地检查它的 HTTP 堆栈是否正常工作来处理这个问题。
HttpCheckEndpoint.java
@Component
@ConfigurationProperties(prefix = "endpoints.httpcheck") // Specifies the prefix on application.yml
public class HttpCheckEndpoint extends AbstractMvcEndpoint {
public HttpCheckEndpoint() {
super("/httpcheck", false);
}
/**
* Check if simply the app can connect to their own HTTP stack and return 200 OK.
* <ul>
* <li>Method: GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS</li>
* <li>Endpoint: "/httpcheck"</li>
* </ul>
*/
@RequestMapping
@ResponseBody
public ResponseEntity<String> checkHttpConnecton() {
if (!isEnabled()) {
return new ResponseEntity<String>("", HttpStatus.NOT_FOUND);
} else {
return new ResponseEntity<String>("{\"status\": \"UP\"}", HttpStatus.OK);
}
}
}
application.yml
endpoints:
enabled: false # Default enabled/disabled on endpoints on Spring Boot Actuator
health: # Health check (already prepared in Spring Boot Actuator)
enabled: true
httpcheck: # Simple HTTP connection check (newly created by myself)
enabled: true
我已经确认它运行良好,但不确定它是否是最佳解决方案...