目录
[1. Spring Boot Actuator 健康检测基础](#1. Spring Boot Actuator 健康检测基础)
[1.1. 引入maven依赖](#1.1. 引入maven依赖)
[1.2. Actuator端点配置](#1.2. Actuator端点配置)
[1.3. 获取健康状态](#1.3. 获取健康状态)
[2. 健康检测接口及内置实现](#2. 健康检测接口及内置实现)
[2.1. HealthIndicator接口](#2.1. HealthIndicator接口)
[2.2. 内置实现](#2.2. 内置实现)
[3. 就绪(Readiness)与存活(Liveness)探针](#3. 就绪(Readiness)与存活(Liveness)探针)
[3.1. 理解两者的区别](#3.1. 理解两者的区别)
[3.2. 启用探针端点](#3.2. 启用探针端点)
[3.3. 分组配置](#3.3. 分组配置)
[4. 自定义健康检查](#4. 自定义健康检查)
[4.1. 何时需要自定义健康检查](#4.1. 何时需要自定义健康检查)
[4.2. 自定义健康检查实现](#4.2. 自定义健康检查实现)
[4.2.1. MetadataServiceHealthIndicator实现类](#4.2.1. MetadataServiceHealthIndicator实现类)
[4.2.2. 访问Readiness接口](#4.2.2. 访问Readiness接口)
[5. 最佳实践](#5. 最佳实践)
[5.1. 健康检查设计原则](#5.1. 健康检查设计原则)
[5.2. 生产环境配置推荐](#5.2. 生产环境配置推荐)
[6. 小结](#6. 小结)
在微服务架构中,服务的健康状态监控是保障系统稳定性的基石。Spring Boot Actuator 提供了一套开箱即用的健康检测机制,让开发者能够快速获得应用的健康状态视图。更重要的是,它通过就绪(Readiness) 和**存活(Liveness)**探针的细粒度区分,为微服务的生命周期管理提供了专业支持。
本文将深入探讨如何充分利用 Spring Boot 内置的健康检测能力,并在必要时进行自定义扩展,构建从启动就绪到运行监控的完整健康检测体系。
1. Spring Boot Actuator 健康检测基础
1.1. 引入maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
1.2. Actuator端点配置
management:
endpoint:
health:
show-details: always
endpoints:
web:
exposure:
include: health,info
1.3. 获取健康状态
访问 /actuator/health 即可获得应用健康状态:

2. 健康检测接口及内置实现
2.1. HealthIndicator接口
Spring Boot通过HealthIndicator接口实现健康检查:

2.2. 内置实现
Spring Boot提供了多个内置的健康指示器:
-
DataSourceHealthIndicator:数据库连接检查 -
DiskSpaceHealthIndicator:磁盘空间检查 -
RedisHealthIndicator:Redis连接检查 -
MongoHealthIndicator:MongoDB连接检查
3. 就绪(Readiness)与存活(Liveness)探针
3.1. 理解两者的区别
Spring Boot 2.3+ 引入了专门的探针支持:
-
就绪探针(Readiness):应用是否准备好接收流量
-
存活探针(Liveness):应用是否仍在正常运行
3.2. 启用探针端点
application.yml配置如下:
java
management:
endpoint:
health:
probes:
enabled: true # 启用就绪和存活探针
现在可以访问专用端点:
-
/actuator/health/readiness- 就绪状态 -
/actuator/health/liveness- 存活状态

3.3. 分组配置
可以通过group属性明确配置readiness和liveness包含的健康指示器,application.yml示例:
java
management:
endpoint:
health:
probes:
enabled: true
group:
readiness:
include: '*' # 就绪检查包含所有指示器
liveness:
include: 'diskSpace,ping' # 存活检查只关注核心资源
分组配置效果:

4. 自定义健康检查
4.1. 何时需要自定义健康检查
在以下场景考虑实现自定义 HealthIndicator:
-
第三方服务集成状态检查
-
业务特定组件的健康状态
-
自定义资源(如文件系统、网络资源)可用性
-
应用特定指标(如队列深度、缓存命中率)
4.2. 自定义健康检查实现
比如应用启动依赖于某个元数据服务,因此自定义一个MetadataServiceHealthIndicator,就绪状态检查时会自动包含这个HealthIndicator。
4.2.1. MetadataServiceHealthIndicator实现类
java
package com.example.provider;
import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.stereotype.Component;
@Component
public class MetadataServiceHealthIndicator implements HealthIndicator {
@Override
public Health health() {
try {
// 模拟调用元数据服务
boolean callSuccess = true;
if (callSuccess) {
return Health.up()
.withDetail("service", "metadata-service")
.withDetail("responseTime", "normal")
.build();
} else {
return Health.down()
.withDetail("service", "metadata-service")
.withDetail("statusCode", "500")
.build();
}
} catch (Exception e) {
return Health.down(e)
.withDetail("service", "metadata-service")
.withDetail("error", "Connection failed")
.build();
}
}
}
4.2.2. 访问Readiness接口

5. 最佳实践
5.1. 健康检查设计原则
-
最小化依赖:存活检查不应依赖外部服务
-
快速响应:健康检查应在合理时间内完成
-
适当缓存:对资源密集的检查使用缓存
-
优雅降级:非关键依赖失败不应导致整体不健康
5.2. 生产环境配置推荐
java
management:
endpoint:
health:
enabled: true
show-details: when_authorized # 仅当用户经过认证且具有相应权限时才显示健康详情
show-components: when_authorized # 仅当用户经过认证且具有相应权限时才显示组件信息
probes:
enabled: true
# 使用通配符包含所有健康指示器
group:
readiness:
include: '*' # 就绪检查包含所有指示器
liveness:
include: 'diskSpace,ping' # 存活检查只关注核心资源
endpoints:
web:
exposure:
include: health,info,metrics,readiness,liveness
6. 小结
Spring Boot Actuator 的健康检测机制提供了从基础到高级的完整解决方案:
-
开箱即用:充分利用内置的健康指示器,快速获得应用健康状态
-
通配符支持 :使用
'*'轻松包含所有健康指示器,无需逐个配置 -
专业区分:通过就绪和存活探针,精确管理应用生命周期
-
易于扩展 :在需要时通过实现
HealthIndicator接口添加自定义检查 -
生产就绪:与 Kubernetes 等平台无缝集成,支持自动化运维
关键要点:
-
默认情况下所有健康指示器都会包含在就绪和存活检查中
-
使用
include: '*'可以明确包含所有指示器 -
使用
exclude可以方便地排除特定指示器 -
自定义的
HealthIndicator会自动被包含