以下是在Spring Boot Actuator中手动注册自定义的健康检查处理的方法
Spring Boot Actuator包含有用于提供实例自身和实例内依赖的外部资源(如硬盘、数据库、消息服务、缓存服务等)运行状态(健康检查结果)的端点(/actuator/health,/actuator/health/{name}),也可以提供自定义的健康检查状态。
自动注册个人的健康检查处理方式
当在Spring Boot的参考文档中介绍HealthIndicator接口的实现类时,附带了示例代码。如果将这些实现类注册到DI容器中,Spring Boot Actuator将自动检测到它们。
@Component // コンポーネントスキャンでDIコンテナに登録
public class MyHealthIndicator implements HealthIndicator {
@Override
public Health health() {
return checkWeatherAvailable() ? Health.up().build(): Health.down().build();
}
private boolean checkWeatherAvailable() {
boolean result = false;
// 死活監視処理
// ...
return result;
}
}
手动注册自定义的健康检查处理方法
Spring Boot Actuator管理着执行健康检查的对象通过HealthIndicatorRegistry进行管理,你也可以通过从DI容器中获取的HealthIndicatorRegistry手动注册自定义的健康检查处理。例如,如果你想根据配置值来更改(增加或减少)健康检查的目标,可以使用手动注册的机制。
@Configuration
public class MyConfiguration {
// ...
@Autowired
void addExternalServiceHealthIndicators(HealthIndicatorRegistry registry, MyProperties properties) {
properties.getExternalServices().stream().filter(s -> StringUtils.hasText(s.getHealthCheckUrl()))
.forEach(s -> registry.register(s.getName(), new UrlBasedHealthIndicator(s.getHealthCheckUrl())));
}
}
public class UrlBasedHealthIndicator implements HealthIndicator {
private final String url;
public UrlBasedHealthIndicator(String url) {
this.url = url;
}
@Override
public Health health() {
return checkWeatherAvailable() ? Health.up().build(): Health.down().build();
}
private boolean checkWeatherAvailable() {
boolean result = false;
// 死活監視処理
// ...
return result;
}
}
总结
在我目前參與的項目中,我們沒有使用Spring Boot作為商業應用程式。然而,我們使用Spring Boot來建立外部系統的模擬器(主要用於測試,但也在商業環境中以內部管理為目的使用)。我希望能夠通過設定值來增減模擬器中處理資源的運作狀態,因此開始研究實現方法。
请参考以下网站
- https://docs.spring.io/spring-boot/docs/2.1.7.RELEASE/reference/html/production-ready-endpoints.html#_writing_custom_healthindicators