(重新)名称Spring Boot HealthIndicator

时间:2018-06-20 10:22:49

标签: java spring-boot spring-boot-actuator

我有以下HealthIndicator

@Component
public class FooBarHealthIndicator implements HealthIndicator {
  // ...

生产中的结果为JSON,例如:

status "DOWN"
  details
    fooBar
      status "DOWN"

但是在我的集成测试中,JSON看起来像

status "DOWN"
  details
    com.acme.fooBar
      status "DOWN"

记下软件包路径。

所以我的问题是:谁负责在/health JSON中命名HealthIndicators?而且(如何配置)?

PS:我已经将名称传递给@Component

@Component("fooBar") // name clash!!
public class FooBarHealthIndicator implements HealthIndicator {
  // ...

起到了作用,但是当FooBarHealthIndicator监视类FooBar时,已经存在该名称的bean。但是,由于它可以在生产中使用而无需命名HealthIndicator,因此必须有其他方法...

1 个答案:

答案 0 :(得分:2)

注意:这种方法依赖于内部实现的利用,这种内部实现将来可能会发生变化。您已被警告。

负责命名运行状况指示器的类称为HealthIndicatorNameFactory,在Spring Boot 2.0.5中看起来像这样。RELEASE:

public class HealthIndicatorNameFactory implements Function<String, String> {

    @Override
    public String apply(String name) {
        int index = name.toLowerCase(Locale.ENGLISH).indexOf("healthindicator");
        if (index > 0) {
            return name.substring(0, index);
        }
        return name;
    }

}

这意味着,如果将@Component命名为(例如)@Component("fooBarHealthIndicator"),那么您应该能够顺利通过,而不会出现任何bean名称冲突。当Spring在为您的bean接线时,而不是由执行器本身,会发生名称冲突。