我开发了一个应用程序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
}
}
答案 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}}}}