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

a9wyjsp7  于 2023-02-16  发布在  Spring
关注(0)|答案(4)|浏览(128)

我相信遵循了几乎所有的教程在互联网上,并阅读了许多如此的答案,但我仍然卡住了。

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致动器作为从属项包括在内:

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

4.最新版本的Spring Boot :

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);
    }

}

我的自定义健康检查必须测试Kafka,但为了简洁起见,我省略了细节,但调用/actuator/health端点时,我得到了相同的默认结果:

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

有什么我可能错过了吗?

wnvonmuf

wnvonmuf1#

我找到了解决方案,但不确定原因。这个类确实没有注册为bean,令人惊讶的是,显式添加base packages属性有帮助:

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

有趣的是,没有必要在不同的项目中做上述工作。

zzlelutf

zzlelutf2#

有趣的是,HealthIndicator的基本包不能被应用程序容器识别,而不是将类声明为@component Stereotype。
修复了以下问题-在Main Sping Boot 应用程序类中声明HealthIndicator的基础包:@SpringBootApplication(scanBasePackages =“类运行状况检查的基础包”)公共类支付服务应用程序{

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

}
编辑:注意-基本包="”的上述声明不是主 Spring Boot 类是不必要的。
您必须停止SERVER,然后完全构建maven应用程序,然后重新启动服务器并重新运行应用程序
现在可以运行查找自定义健康终结点。

f45qwnt8

f45qwnt83#

我也遇到问题,我想念的是

management:
  endpoint:
    health:
      show-details: always
a11xaf1n

a11xaf1n4#

这可以通过添加以下代码来解决:

management:
  endpoint:
    health:
      show-details: always

然而,这也带来了另一个问题。当调用/actuator/health端点时,您会看到所有的细节,这对我来说是个问题。我想要实现的是只看到两个端点的状态。

相关问题