Spring Actuator CompositeHealthIndicator:如何自动集成所有指标到/health
嘿,我之前也踩过这个坑!这种情况基本都是配置或者自动配置层面的问题,导致默认健康指标被悄悄禁用了,咱们一步步排查解决:
检查默认指标开关配置
最常见的原因是你在配置文件里不小心设置了management.health.defaults.enabled=false,这个配置会直接关掉所有Spring Boot自带的健康指标(比如磁盘空间、数据库连接、Redis状态这些),只保留你自定义的。
你只需要把这个配置改成true,或者直接删掉它(默认值就是true)就行。举个YAML配置的例子:management: health: defaults: enabled: true show-details: always # 建议打开这个,方便查看所有指标的详细状态确认自定义HealthIndicator的实现正确性
确保你的自定义类是正确实现了HealthIndicator接口(或者继承AbstractHealthIndicator),并且被Spring上下文扫描到(比如加了@Component或者通过@Bean注册)。正确的实现示例:@Component public class CustomHealthIndicator implements HealthIndicator { @Override public Health health() { // 这里写你的自定义健康检查逻辑 boolean serviceIsUp = checkCustomServiceStatus(); if (serviceIsUp) { return Health.up() .withDetail("custom-service", "运行正常") .withDetail("check-time", System.currentTimeMillis()) .build(); } else { return Health.down() .withDetail("custom-service", "连接失败") .build(); } } private boolean checkCustomServiceStatus() { // 模拟检查逻辑,实际替换成你的业务检查 return true; } }只要你的Bean是合法的
HealthIndicator类型,Spring的健康聚合器会自动把所有同类Bean都整合到/actuator/health端点里。排查自动配置是否被排除
检查你的启动类有没有用@SpringBootApplication(exclude = ...)排除了默认健康指标的自动配置类,比如DataSourceHealthIndicatorAutoConfiguration、DiskSpaceHealthIndicatorAutoConfiguration这类。如果有,去掉对应的排除配置,让Spring自动加载这些默认指标。确认Actuator依赖是否完整
确保你的项目里正确引入了spring-boot-starter-actuator依赖,没有这个依赖的话,默认的健康指标逻辑根本不会生效。Maven依赖示例:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
如果以上步骤都排查过还是有问题,可以看看启动日志,搜索关键词HealthIndicator,看看默认的那些指标类(比如DiskSpaceHealthIndicator)有没有被Spring加载。如果日志里完全没出现这些类,那大概率是自动配置被拦截了,需要进一步检查配置类或者依赖。
内容的提问来源于stack exchange,提问作者Christian Bongiorno

