spring boot健康指标是实现微服务探针最轻量、最标准的方式,天然集成actuator,支持分组、缓存、状态聚合与自定义响应,需避免耗时操作并确保语义清晰。

Spring Boot 的健康指标(Health Indicator)是实现微服务探针最轻量、最标准的方式。它不依赖外部框架,天然集成 Actuator,能自动暴露 HTTP 端点(如 /actuator/health),支持分组、缓存、状态聚合和自定义响应字段。
定义自定义 HealthIndicator 实现类
只需实现 HealthIndicator 接口,重写 health() 方法,返回 Health 对象即可。Spring Boot 会自动扫描并注册该 Bean。
- 使用
Health.up().withDetail("version", "1.2.0").build()表示健康状态,并附带元数据 - 用
Health.down().withException(e).build()标记异常状态,withException会自动记录堆栈摘要(默认不暴露完整异常) - 避免在
health()中执行耗时操作(如远程调用),否则拖慢整个健康检查;确有必要时加超时控制或异步降级
按业务维度分组与细粒度探针
Actuator 支持通过 management.endpoint.health.show-details 和 management.endpoint.health.group.* 配置实现分组。你可以为不同依赖或模块定义独立探针:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 数据库连接池探针:检查 HikariCP 的活跃连接数、等待线程数是否超阈值
- 消息队列探针:验证 RabbitMQ 连接是否存活、指定 exchange 是否可声明
- 下游服务探针:发起轻量 HTTP HEAD 请求(带 1s 超时)检测关键第三方接口可达性
- 本地资源探针:监控磁盘剩余空间、JVM 堆内存使用率是否超过 90%
集成 Liveness / Readiness 标准化语义
从 Spring Boot 2.3 开始,Actuator 原生支持 /actuator/health/liveness 和 /actuator/health/readiness。可通过 @LivenessState 和 @ReadinessState 注解区分探针用途:
-
Liveness探针只反映进程是否“活着”,适合触发重启(如死锁、线程卡死) -
Readiness探针表示是否“就绪接收流量”,应包含外部依赖(DB、Redis、配置中心)状态 - 自定义探针可选择性加入某一分组:例如 DB 探针仅注册到
readiness组,而 JVM 内存探针同时加入两个组
增强可观测性与生产友好实践
基础探针满足可用性判断,但生产环境需更精细的诊断能力:
- 在
withDetail()中加入关键指标快照(如 Redis 连接池 active count、HTTP client pending requests) - 配合 Micrometer 记录探针执行耗时、失败次数等指标,便于告警与趋势分析
- 对敏感信息(如数据库 URL、密码)做脱敏处理,不在健康响应中直接暴露
- 禁用
show-details=always生产环境配置,改为show-details=when_authorized并配合 Spring Security 控制访问权限
不复杂但容易忽略的是探针的语义一致性——每个自定义探针应明确回答“这个组件是否处于可工作状态”,而不是返回模糊的统计值。只要逻辑清晰、响应快速、状态准确,就能成为可靠的服务探针基础。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










