Spring Boot自定义运行状况指示器未显示

时间:2019-11-22 19:25:04

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

我相信几乎所有互联网上的教程都可以学习,并且阅读了很多SO答案,但我仍然受阻。

1。简单的健康检查

@Component
public class HealthCheck implements HealthIndicator {

    @Override
    public Health health() {
        return Health.up().build();
    }

}

2。 Application.yaml配置为显示所有详细信息:

management.endpoints.web.exposure.include: "*"
management.endpoint.health.show-details: ALWAYS

3。 Spring-boot-actuator作为依赖项包括在内:

    implementation 'org.springframework.boot:spring-boot-starter-actuator'
    implementation 'org.springframework.boot:spring-boot-starter-web'

4。最新版本的春季启动:

id 'org.springframework.boot' version '2.2.0.RELEASE'

5。主应用程序类用@SpringBootApplication注释(隐式带来@ComponentScan)。

@SpringBootApplication
public class PaymentServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(PaymentServiceApplication.class, args);
    }

}

我的自定义健康检查必须测试Apache Kafka,但是为了简洁起见,我跳过了详细信息。 尽管如此,调用/actuator/health端点仍得到相同的默认结果:

{
    "status": "UP",
    "components": {
        "diskSpace": {
            "status": "UP",
            "details": {
                "total": 250685575168,
                "free": 99168997376,
                "threshold": 10485760
            }
        },
        "ping": {
            "status": "UP"
        }
    }
}

有什么我可能想念的吗?

2 个答案:

答案 0 :(得分:0)

我找到了解决方案,但不确定原因。该类确实未注册为bean,令人惊讶的是,显式添加基本包属性有助于:

@SpringBootApplication(scanBasePackages="com.example.*")

有趣的是,无需在其他项目中进行上述操作。

答案 1 :(得分:0)

有趣的是,应用程序容器无法识别HealthIndicator的基本包,而不是将类声明为@component构造型。

解决此问题-在Main Spring引导应用程序类中声明HealthIndicator的基本软件包: @SpringBootApplication(scanBasePackages =“您的类HealthCheck的基本软件包”) 公共类PaymentServiceApplication {

public static void main(String[] args) {
    SpringApplication.run(PaymentServiceApplication.class, args);
}

}

编辑:注意-不需要基本package =“”的上述声明不是主spring引导类。

您必须先停止SERVER,然后重新构建Maven应用程序,然后重新启动服务器,然后重新运行该应用程序

您现在可以运行以找到您的自定义运行状况终结点。