spring cloud框架之健康检查
引言:由于业务需要,我们框架中引入了多数据源,我们的持久层框架是spring data jpa,第一个数据源是:mysql,也是我们的主数据源,第二个数据源是:oracle,第三个数据源是sap那边的hana数据库。当引入hana数据库时,发现实例起不来了,报错误的sql语法,经过一番研究,发现是健康机制执行时,会检测每个数据源的健康程度,如果健康,则状态为:UP,如果不健康,状态为:DOWN。伴随着好奇心,我探究了下springcloud中的健康检查机制。
springcloud搭配k8s可以搭建健康检测机制,可以发现不健康的实例,并将其重启。
涉及到数据库相关你的健康检查是个配置累:DataSourceHealthIndicatorAutoConfiguration.class
@Configuration
@ConditionalOnClass({
JdbcTemplate.class, AbstractRoutingDataSource.class })
@ConditionalOnBean(DataSource.class)
@ConditionalOnEnabledHealthIndicator("db")
@AutoConfigureBefore(HealthIndicatorAutoConfiguration.class)
@AutoConfigureAfter(DataSourceAutoConfiguration.class)
public class DataSourceHealthIndicatorAutoConfiguration extends
CompositeHealthIndicatorConfiguration<DataSourceHealthIndicator, DataSource>
implements InitializingBean {
private final Map<String, DataSource> dataSources;
private final Collection<DataSourcePoolMetadataProvider> metadataProviders;
private DataSourcePoolMetadataProvider poolMetadataProvider;
public DataSourceHealthIndicatorAutoConfiguration(
ObjectProvider<Map<String, DataSource>> dataSources,
ObjectProvider<Collection<DataSourcePoolMetadataProvider>> metadataProviders) {
this.dataSources = filterDataSources(dataSources.getIfAvailable());
this.metadataProviders &