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