当前位置: 首页 > 知识库问答 >
问题:

Spring启动执行器健康指示器

左翰海
2023-03-14

我们已经在几个项目中使用了Spring Boot,现在我们使用的是最新版本1.2.3。我们正在合并执行器。到目前为止,一切都很顺利,只是我们发现/health指示器[default]显示服务已关闭。事实并非如此。这些服务是通过数据源实现的。它可以调用其他SOAP或Rest服务。卫生服务部门在看什么来衡量一项服务是否下降?

共有3个答案

毕瀚
2023-03-14

上述评论有助于我开展研究,但对我来说还不够:

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

以下是帮助我使其运行的配置:像下面这样定义健康指标@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;
    }
庞书
2023-03-14

datasourcehealthdicator用于检查可用性。默认查询是SELECT 1,但也有一些特定于产品的查询
您可以编写自己的HealthIndicator。要么实现该接口,要么扩展AbstractHealthIndicator
要禁用默认的数据库运行状况检查,请将此行放入应用程序属性管理中。健康db。enabled=false。希望有帮助

麻和雅
2023-03-14

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

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

@Autowired(required = false)
private DataSource dataSource;

@Bean
@Primary
public DataSourceHealthIndicator dataSourceHealthIndicator() {
    return new DataSourceHealthIndicator(dataSource, "SELECT 1 FROM DUAL");
}
 类似资料:
  • 您可以将许多自定义运行状况指示器添加到Spring boot的执行器中,这非常棒,因为它们的总状态被认为是您的应用程序的运行状况。 有没有可能只查询其中一个指标呢? 对于一个复杂的应用程序,我有大约10个指示器来告诉我的应用程序总体运行状况,整个检查大约需要20秒。 有一些指标我想更频繁地点击,因为它们提供了对高吞吐量组件的快速响应。有可能以某种方式查询单个指标吗?

  • 我正在尝试配置执行器的健康探测器,以包括对嵌套在第一级之外的外部服务的检查。例如,当调用/执行器/健康时,以下是可用的健康指标: 在jms组件下,有两个代理——broker1和broker2。我可以将执行器配置为将jms包括在就绪组中,如: 但是,这将包括准备调查中的所有经纪人。 当呼叫 /actuator/health/readiness,我得到: 由于Kubernetes中的就绪性探测只会阻止

  • 我们正在尝试healthcheck一个Spring Boot应用程序,我们正在计划使用Spring Boot执行器health来获得健康状态。 令人困惑的是,当CassandraHealthIndicator、DiskSpaceHealthIndicator、DataSourceHealthIndicator、ElasticsearchHealthIndicator、JmsHealthIndica

  • 因此,我将Spring引导执行器添加到我的应用程序中,并在应用程序中指定。属性管理。endpoint。健康隐藏物生存时间=120秒,以缓存健康检查结果。因此,当我调用执行器/健康时,结果被缓存,效果很好。 当我调用执行器/健康/就绪或自定义创建的组时,问题开始出现。该请求结果不会被缓存。我查阅了Spring文档,只找到了主要健康终点的信息,没有找到特定人群的信息。 所以我的问题是:我错过了什么吗?

  • 我想报告应用程序的健康状态作为一个衡量标准,我希望使用相同的健康指标作为Spring启动执行器,但是,我没有看到任何可导出的组件从Spring启动执行器的依赖关系,我可能能够在这里使用。 我想编写的代码: 当然,不是导出的bean。Spring启动执行器是否导出我可以以这种方式消费的bean?

  • 我有一个基于SpringBoot的web应用程序,它公开了一个Consult health indicator bean。 该bean由SpringBoot的autoconfiguration正确创建和初始化,但是,尽管关联的配置属性“Management.health.consul.Enabled”设置为true,但指示器并未显示在执行器健康endpoint中: 经过进一步检查,我发现了负责获取