弹簧启动器执行器健康指示器

时间:2015-04-25 13:40:28

标签: spring spring-boot

我们现在已经在几个项目中使用Spring Boot,我们使用的是最新版本1.2.3。我们正在整合Actuator。到目前为止,除了我们发现/ health指示符[default]显示服务已关闭之外,一切正常。这不是真的。这些服务是使用数据源实现的。它可以调用其他SOAP或Rest服务。什么是健康服务,以衡量服务是否已关闭?

3 个答案:

答案 0 :(得分:6)

正如#derFuerst所说,DataSourceHealthIndicator有默认查询来检查数据库是否已启动。

如果您想使用适当的特定于供应商的查询,您应该在配置类中编写自己的运行状况指示器,例如 Oracle 数据源:

@Autowired(required = false)
private DataSource dataSource;

@Bean
@Primary
public DataSourceHealthIndicator dataSourceHealthIndicator() {
    return new DataSourceHealthIndicator(dataSource, "SELECT 1 FROM DUAL");
}

答案 1 :(得分:4)

DataSourceHealthIndicator用于检查可用性。默认查询为SELECT 1,但也有一些特定于产品的查询 您可以编写自己的HealthIndicator。您可以实现界面或扩展AbstractHealthIndicator 要禁用缺省db-health-check,请将此行放入应用程序属性management.health.db.enabled=false。 希望有所帮助

答案 2 :(得分:2)

以上评论帮助我进行了研究,但对我而言还不够:

@Bean
@Primary
public DataSourceHealthIndicator dataSourceHealthIndicator() {
    return new DataSourceHealthIndicator(dataSource, "SELECT 1 FROM DUAL");
}

以下是帮助我使其运行的配置:像以下内容一样定义 HealthIndicator @Bean并提供所需的查询:

@Bean
@Primary
public HealthIndicator dbHealthIndicator() {
  return new DataSourceHealthIndicator(dataSource, "SELECT 1 FROM DUMMY");
}

如果未提供查询,则将使用SELECT 1。正如#derFuerst所说,将使用 DataSourceHealthIndicator 的默认实现:

public DataSourceHealthIndicator(DataSource dataSource, String query) {
    super("DataSource health check failed");
    this.dataSource = dataSource;
    this.query = query;
    this.jdbcTemplate = dataSource != null ? new JdbcTemplate(dataSource) : null;
}
...
protected String getValidationQuery(String product) {
        String query = this.query;
        if (!StringUtils.hasText(query)) {
            DatabaseDriver specific = DatabaseDriver.fromProductName(product);
            query = specific.getValidationQuery();
        }

        if (!StringUtils.hasText(query)) {
            query = "SELECT 1";
        }

        return query;
    }