我们在应用程序中确实使用了Spring Boot运行状况检查。在一个已检查的应用程序上,数据库似乎无法及时回答。我们正在使用DataSourceHealthIndicator,这是在几秒钟后回答,但可以,但是需要不同的时间范围才能返回。

我们是否可以在此HealthIndicator上设置一个超时时间(并且很可能也对其他HealthIndicator设置超时),以便HealthIndicator至少在2秒后报告错误(如果无法建立与数据库的连接)?

还是我们可以问数据源,是否仍然有可用的开放连接?

我知道,我们应该使用这些连接来解决问题,并且我们已经在努力解决这一问题,但是类似这样的HealthCheck也将是不错的选择。

最佳答案

您可以在application.properties中禁用默认的数据库运行状况指示器

management.health.db.enabled=false

并实现具有所需行为的自定义HealthIndicator,如here所述。

在您的自定义HealthIndicator实现中,您可以使用其他JdbcTemplate,其期望的超时值为2秒,如下所示:
JdbcTemplate jdbcTemplate = new JdbcTemplate(datasource);
jdbcTemplate.setQueryTimeout(2);
jdbcTemplate.execute(...);

如果execute调用引发异常,则您的指标应返回Health.down(),否则应返回Health.up()

关于java - Spring 健康指标-超时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32358362/

10-09 03:30