Spring Boot Actuator 有几个预定义的健康指标比如 DataSourceHealthIndicator, DiskSpaceHealthIndicator, MongoHealthIndicator, RedisHealthIndicator, CassandraHealthIndicator等。它使用这些健康指标作为健康检查的一部分。

本文对比较常用数据源健康指标 DataSourceHealth 相关的源码进行研究解读,以此作为自定义 HealthIndicator 的编程基础。已实现规范的HealthIndicator编程模式。

DataSourceHealthIndicator 源码核心部分

DataSourceHealthIndicator UML结构DataSourceHealthIndicator UML结构

根据UML图可知:

  • 实现 InitializingBean 接口 并实现 afterPropertiesSet() 方法

    如果 dataSource 为null 则抛出 IllegalStateException 异常

  • 继承 AbstractHealthIndicator 抽象类 并实现doHealthCheck() 方法

    如果 dataSource 为null 则 标记 up 并显示 database unknow. 否则执行 doDataSourceHealthCheck()

DataSourceHealthIndicatorAutoConfiguration 源码核心部分

DataSourceHealthIndicatorAutoConfiguration UML结构DataSourceHealthIndicatorAutoConfiguration UML结构

注解

1
2
3
4
5
6
7
8
9
@Configuration
// 某个class位于类路径上,才会实例化一个Bean 这里是JdbcTemplate和AbstractRoutingDataSource存在时才实例化
@ConditionalOnClass({ JdbcTemplate.class, AbstractRoutingDataSource.class })
// 仅仅在当前上下文中存在某个对象时,才会实例化一个Bean 这里是DataSourcebean存在是
@ConditionalOnBean(DataSource.class)
// Actuator 中自定义的 EnabledHealthIndicator 中 包含 "x" 时实例化Bean
@ConditionalOnEnabledHealthIndicator("db")
@AutoConfigureBefore(HealthIndicatorAutoConfiguration.class)
@AutoConfigureAfter(DataSourceAutoConfiguration.class)

以此可以看出,Actuator 的 healthy 是依赖于 config 配置的实例化机制,通过bean加载所需的资源进行验证。

所以对于自定义的检测指标可按照这种方式进行编程。