首页 > 解决方案 > StatusAggregator 的自定义实现

问题描述

迁移到 Spring Boot 2.3.0 后,我需要创建 StatusAggregator 的自定义实现。但是,在不推荐使用 HealthAggregator 之后,我不知道如何正确执行此操作。我有几个外部系统,我检查了它们的可用性,在以前的版本中我有方法Health aggregate(Map<String, Health> healths),但现在它Status getAggregateStatus(Set<Status> statuses)来自接口 StatusAggregator,其中作为参数它有一组状态。我需要从系统状态对象中识别出来,所以在创建健康期间,我使用我创建带有描述的状态的方法,如下所示: Health.status(new Status((Status.DOWN.getCode(), "TEST_SYSTEM")).build()) 然后我想Status getAggregateStatus(Set<Status> statuses)通过这个描述在方法中识别它但是当我去 Status.class并检查等于它不包括描述字段。

public boolean equals(Object obj) {
        if (obj == this) {
            return true;
        } else {
            return obj instanceof Status ? ObjectUtils.nullSafeEquals(this.code, ((Status)obj).code) : false;
        }
    }

所以Set<Status>只会返回具有不同代码的状态。

标签: spring-bootspring-boot-actuator

解决方案


我也想做类似的事情,但没有找到一种方法来识别发送状态的组件。我为每个 API 定义了自定义健康指标,并检查了这些单独健康指标中外部 API 的依赖关系。对于自定义健康指标,在 HealthIndicator 中实现健康方法并使用“组件”注释以在应用程序上下文中注册,如文档中所述。


推荐阅读