春天Couchbase健康指示器

时间:2016-12-01 07:41:40

标签: java spring couchbase indicator health-monitoring

我在为Spring项目设置健康指标时遇到了问题。从版本1.4.0开始,Spring自带了CouchbaseHealthIndicator(参见http://docs.spring.io/spring-boot/docs/1.4.1.RELEASE/api/org/springframework/boot/actuate/health/CouchbaseHealthIndicator.html),但我无法使其工作。其他健康指标工作正常(此项目中的磁盘空间,其他项目中的邮件和数据库)。

@ConditionalOnClass({ CouchbaseOperations.class, Bucket.class })
@ConditionalOnBean(CouchbaseOperations.class)
@ConditionalOnEnabledHealthIndicator("couchbase")

这是初始化健康指标的条件。提到的类在类路径上。 项目启动后,我让它在应用程序上下文中打印它的bean - 有一个bean' CouchbaseTemplate',它实现了所需的CouchbaseOperations。

我也像这样手动启用了基础健康检查

management.health.couchbase.enabled = true

不过,它一直在检查磁盘空间,不检查沙发底座。

您可以在GitHub上找到我的项目:https://github.com/Age15990/CouchbaseHI 请随时下载并试用。如果你之前遇到过这个问题,或者你知道如何解决它,我很乐意阅读你的答案。

提前致谢!

1 个答案:

答案 0 :(得分:0)

spring-boot-starter-actuator似乎存在缺陷。我为here提交了一张票。

解决方法可能是自己提供配置:

@Configuration
@ConditionalOnClass({ CouchbaseOperations.class, Bucket.class })
//@ConditionalOnBean(CouchbaseOperations.class)
@ConditionalOnEnabledHealthIndicator("couchbase")
public class CouchbaseHealthConfig extends CompositeHealthIndicatorConfiguration<CouchbaseHealthIndicator, CouchbaseOperations>
{
    private final Map<String, CouchbaseOperations> couchbaseOperations;

    public CouchbaseHealthConfig(Map<String, CouchbaseOperations> couchbaseOperations)
    {
        this.couchbaseOperations = couchbaseOperations;
    }

    @Bean
    @ConditionalOnMissingBean(name = "couchbaseHealthIndicator")
    public HealthIndicator couchbaseHealthIndicator()
    {
        return createHealthIndicator(this.couchbaseOperations);
    }
}

<强>解释

沙发基地健康指标的自动配置似乎被打破了。当我从@ConditionalOnBean(CouchbaseOperations.class)中的原始配置中评论HealthIndicatorAutoConfiguration.class时,它对我有用。

这意味着在自动配置发生之前未正确初始化CouchbaseOperations.class