我目前正在使用Spring Boot Actuator“health”endpoint实现一个健康监控框架。致动器基础设施支持创建自定义健康检查,并提供大量内置健康检查;其中一个是数据源HealthIndicator
。
datasourcehealthdindicator
是组织的一部分。springframework。靴子启动。health
软件包,目前我们的health framework正在使用它来检查数据源的运行状况。我需要使用自己稍微修改过的datasourcehealthdindicator
版本,并禁用“默认值”
我已经尝试了这里和这里建议的解决方案,但没有成功。我能做错什么?
谢谢
编辑:8/18/2016, 3:38PM EST
我已将bean重命名为dbhealthdindicator
,并将以下内容添加到我的配置类中:
@Bean
public HealthIndicator dbHealthIndicator() {
return new dbHealthIndicator();
}
我现在得到以下例外情况:
org。springframework。豆。工厂BeanCreationException:创建名为“dataAccessMapperFactory”的bean时出错,该bean在类路径资源[udtContext.xml]中定义。
java.lang.RuntimeException:java.sql.SQLException:无法启动通用连接池:oracle.ucp.UniversalConnectionPoolException
编辑:8/19/2016, 9:22AM EST
这可能有助于证明我正在努力做什么。目前,我的/health
endpoint返回如下内容:
dataSource: {
status: "UP",
database: "mySql",
hello: "hello"
}
我想让它返回更像这样的内容,“result”旁边的整数是数据库中存储过程返回的状态码:
dataSource: {
status: "UP",
database: "mySql",
hello: "hello",
result: 0
}
这是数据源HealthIndicator中的方法。执行检查的java:
private void doDataSourceHealthCheck(Health.Builder builder) throws Exception {
String product = getProduct();
builder.up().withDetail("database", product);
String validationQuery = getValidationQuery(product);
if (StringUtils.hasText(validationQuery)) {
try {
// Avoid calling getObject as it breaks MySQL on Java 7
List<Object> results = this.jdbcTemplate.query(validationQuery,
new SingleColumnRowMapper());
Object result = DataAccessUtils.requiredSingleResult(results);
builder.withDetail("hello", result);
}
catch (Exception ex) {
builder.down(ex);
}
}
}
我需要在builder下为这个方法添加八行代码。withDetail(“你好”,结果)
,以执行对存储过程的调用。我不想“反编译”默认类,我无法重写这个方法,因为它是私有的。我在想我可以复制
数据源HealthIndicator。java
在我自己的bean中编写代码,添加我的代码,并重新连接Spring以使用这个版本,但我不知道这是否可行。
通常我会查看该HealthIndex ator
的配置。在这种情况下,它是HealthIndex atorAutoConfiguration。DataSourcesHealthIndex atorConfiguration
。正如第一个链接建议所述。您需要将您的自定义bean命名为dbHealthIndex ator
,以便@HRC tionalOnMissingBean(name="dbHealthIndex ator")
不允许注册默认值。
提供一些启动日志或不适用于您的详细信息将有助于人们排除故障。
下面是我如何让它工作的一个例子:
@SpringBootApplication
public class StackoverflowWebmvcSandboxApplication {
@Bean
public HealthIndicator dbHealthIndicator() {
return new HealthIndicator() {
@Override
public Health health() {
return Health.status(Status.UP).withDetail("hello", "hi").build();
}
};
}
public static void main(String[] args) {
SpringApplication.run(StackoverflowWebmvcSandboxApplication.class, args);
}
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "hello";
}
}
}
然后,/health
endpoint返回:
{
"status": "UP",
"db": {
"status": "UP",
"hello": "hi"
},
"diskSpace": {
"status": "UP",
"total": 127927316480,
"free": 17191956480,
"threshold": 10485760
}
}
Spring Cloud Stream为粘合剂提供健康指标。它以binders的名义注册,可以通过设置management.health.binders.enabled属性启用或禁用。
我用的是Spring靴2 M3执行器。默认情况下,健康endpoint映射到。 是否可以将此路径更改为?
我有一个基于SpringBoot的web应用程序,它公开了一个Consult health indicator bean。 该bean由SpringBoot的autoconfiguration正确创建和初始化,但是,尽管关联的配置属性“Management.health.consul.Enabled”设置为true,但指示器并未显示在执行器健康endpoint中: 经过进一步检查,我发现了负责获取
我有spring boot 2 REST应用程序,启用了Spring执行器。默认情况下,spring会在endpoint中生成大量指标(jvm、cpu、内存等)。除此之外,我还使用测微计API创建自定义指标。到目前为止,它一直运行得很好。 现在,我需要只生成自定义指标,但禁用spring提供的所有默认指标。请注意,我不想禁用endpoint,但我只想禁用默认指标。 现在直接/间接地可能吗? 谢谢你
我有一个基于SpringBoot的web应用程序,它公开了一个Consor健康指示器bean 在进一步检查后,我发现了负责获取所有可用指标的下面片段(HealthEndpoint Configuration.java): 在这里设置一个断点,我看到ConsultHealthIndicator bean确实没有列在applicationContext的输出中。getBeansOfType(Healt
我们已经在几个项目中使用了Spring Boot,现在我们使用的是最新版本1.2.3。我们正在合并执行器。到目前为止,一切都很顺利,只是我们发现/health指示器[default]显示服务已关闭。事实并非如此。这些服务是通过数据源实现的。它可以调用其他SOAP或Rest服务。卫生服务部门在看什么来衡量一项服务是否下降?