You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让/actuator/health/readiness在ReadinessStateHealthIndicator后执行自定义指标?

解决方案

要实现/actuator/health/readiness端点先执行ReadinessStateHealthIndicator,再执行自定义HealthIndicator,可以通过自定义健康组+执行顺序控制来实现,具体步骤如下:

1. 控制自定义HealthIndicator的执行顺序

给你的自定义HealthIndicator添加@Order注解,设置一个比ReadinessStateHealthIndicator更高的数值(默认ReadinessStateHealthIndicator的@Order为0,自定义检查器用大于0的数值即可确保在它之后执行):

@Component("customReadinessCheck1")
@Order(1)
public class CustomReadinessCheck1 implements HealthIndicator {
    @Override
    public Health health() {
        // 自定义就绪检查逻辑
        return Health.up()
                .withDetail("custom-check-1", "passed")
                .build();
    }
}

@Component("customReadinessCheck2")
@Order(2)
public class CustomReadinessCheck2 implements HealthIndicator {
    @Override
    public Health health() {
        // 另一个自定义就绪检查逻辑
        return Health.up()
                .withDetail("custom-check-2", "passed")
                .build();
    }
}

2. 配置自定义健康组并绑定到readiness端点

在application.yml(或application.properties)中定义专属的健康组,指定仅包含readinessState(对应ReadinessStateHealthIndicator)和你的自定义检查器,然后将readiness端点与该组绑定:

spring:
  actuator:
    health:
      # 定义自定义就绪检查组
      groups:
        custom-readiness-group:
          include: readinessState, customReadinessCheck1, customReadinessCheck2
      # 确保ReadinessStateHealthIndicator启用
      readiness-state:
        enabled: true
    endpoints:
      web:
        exposure:
          include: health
    endpoint:
      health:
        # 将readiness端点绑定到自定义组
        groups:
          readiness: custom-readiness-group

如果使用application.properties,配置如下:

spring.actuator.health.groups.custom-readiness-group.include=readinessState,customReadinessCheck1,customReadinessCheck2
spring.actuator.health.readiness-state.enabled=true
spring.actuator.endpoints.web.exposure.include=health
spring.actuator.endpoint.health.groups.readiness=custom-readiness-group

3. 验证效果

启动应用后访问/actuator/health/readiness,返回的健康信息会包含readinessState和你自定义的检查器结果,且执行顺序符合@Order的设置。

备选:编程式配置(适合复杂场景)

如果需要更灵活的配置逻辑,可以通过HealthEndpointGroupsCustomizer实现编程式定义健康组:

@Configuration
public class HealthGroupConfig {

    @Bean
    public HealthEndpointGroupsCustomizer customReadinessGroupCustomizer() {
        return groups -> {
            // 构建自定义健康组
            HealthGroup readinessGroup = HealthGroup.builder()
                    .include("readinessState", "customReadinessCheck1", "customReadinessCheck2")
                    .build();
            // 添加组并绑定到readiness端点
            groups.add("custom-readiness-group", readinessGroup);
            groups.setEndpointGroup("readiness", "custom-readiness-group");
        };
    }
}

内容的提问来源于stack exchange,提问作者CarlosLaw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 14:05:11