执行器依赖性不显示某些应用程序的运行状况

时间:2017-08-22 13:22:42

标签: maven spring-boot gradle spring-boot-actuator

我开发了一个应用程序spring-boot,我使用spring-boot-starter-actuator来获取有关我的应用程序的信息。问题是请求GET:/ health dos不显示redis的状态。这是我的application.yml

的快照
spring:
  datasource:
    url: jdbc:mysql://********
    username: ****
    password: *******
    driver-class-name: com.mysql.jdbc.Driver
  ldap:
    urls: ldap://*****
    username: ****
    password: *******
  redis:
    url: redis://******

这是发出GET请求的结果:/ health

{
    "status": "UP",
    "diskSpace": {
        "status": "UP"
    },
    "ldap": {
        "status": "UP",
        "version": "3"
    },
    "db": {
        "status": "UP",
        "database": "MySQL",
        "hello": 1
    }
}

2 个答案:

答案 0 :(得分:0)

看来Spring Actuator无法识别Redis是否启用。你可以把这个配置添加到yml文件

management:
  health:
    redis:
      enabled: true

希望得到这个帮助。

答案 1 :(得分:0)

我遇到了完全相同的问题,并且找到了解决方案。

如果您查看spring-boot-actuator中的默认类RedisHealthIndicator,您会发现它使用了

private final RedisConnectionFactory redisConnectionFactory;

实际连接到Redis服务器并检查状态。但是,此类是从import org.springframework.data.redis.connection.RedisConnectionFactory;

导入的

只要您在项目中不使用spring-data-redis,开箱即用的运行状况指示器将不起作用。出于好奇,因为我真的不想导入spring-data-redis,所以将其作为依赖项添加到了我的项目中,并且如果在application.properties中设置了此代码,则会显示运行状况指示器:

 management.health.redis.enabled = true

取出依赖项,并且运行状况终结点消失。

最后,要使Redis运行状况指示器具有弹簧启动致动器的运行状况,您需要使用spring-data-redis并启用默认的Redis运行状况指示器,或者通过简单扩展AbstractHealthIndicator并创建自己的指示器来进行检查状态自己。我想我会尝试第二种选择-似乎并不难。

编辑-我做到了,它的工作原理就像一个魅力。我刚刚创建了一个扩展AbstractHealthIndicator的类,并且在doHealthCheck方法中,我只是这样做:

@Override
protected void doHealthCheck(Health.Builder builder) throws Exception {
    var pong = healthConnection.sync().ping();
    if (pong.equals("PONG")) {
        builder.up();
    }
}

我将io.lettuce:lettuce-core用于Redis连接。连接是在构造函数中设置的,并在@PreDestroy方法中关闭。

现在在健康端点中,我得到:{"status":"UP","details":{"redis":{"status":"UP"},"db":{"status":"UP","details":{"database":"MySQL","hello":1}}}}