diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/redis/RedisHealthIndicator.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/redis/RedisHealthIndicator.java index 83648a9f59..cca6d7c867 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/redis/RedisHealthIndicator.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/redis/RedisHealthIndicator.java @@ -16,8 +16,6 @@ package org.springframework.boot.actuate.redis; -import java.util.Properties; - import org.springframework.boot.actuate.health.AbstractHealthIndicator; import org.springframework.boot.actuate.health.Health; import org.springframework.boot.actuate.health.HealthIndicator; @@ -38,9 +36,7 @@ import org.springframework.util.Assert; */ public class RedisHealthIndicator extends AbstractHealthIndicator { - static final String VERSION = "version"; - - static final String REDIS_VERSION = "redis_version"; + private static final String REDIS_VERSION_PROPERTY = "redis_version"; private final RedisConnectionFactory redisConnectionFactory; @@ -54,20 +50,24 @@ public class RedisHealthIndicator extends AbstractHealthIndicator { protected void doHealthCheck(Health.Builder builder) throws Exception { RedisConnection connection = RedisConnectionUtils.getConnection(this.redisConnectionFactory); try { - if (connection instanceof RedisClusterConnection) { - ClusterInfo clusterInfo = ((RedisClusterConnection) connection).clusterGetClusterInfo(); - builder.up().withDetail("cluster_size", clusterInfo.getClusterSize()) - .withDetail("slots_up", clusterInfo.getSlotsOk()) - .withDetail("slots_fail", clusterInfo.getSlotsFail()); - } - else { - Properties info = connection.info(); - builder.up().withDetail(VERSION, info.getProperty(REDIS_VERSION)); - } + doHealthCheck(builder, connection); } finally { RedisConnectionUtils.releaseConnection(connection, this.redisConnectionFactory, false); } } + private void doHealthCheck(Health.Builder builder, RedisConnection connection) { + if (connection instanceof RedisClusterConnection) { + ClusterInfo clusterInfo = ((RedisClusterConnection) connection).clusterGetClusterInfo(); + builder.up().withDetail("cluster_size", clusterInfo.getClusterSize()) + .withDetail("slots_up", clusterInfo.getSlotsOk()) + .withDetail("slots_fail", clusterInfo.getSlotsFail()); + } + else { + String version = connection.info().getProperty(REDIS_VERSION_PROPERTY); + builder.up().withDetail("version", version); + } + } + } diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/redis/RedisReactiveHealthIndicator.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/redis/RedisReactiveHealthIndicator.java index c708246320..d981cde76c 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/redis/RedisReactiveHealthIndicator.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/redis/RedisReactiveHealthIndicator.java @@ -39,6 +39,8 @@ import org.springframework.data.redis.connection.ReactiveRedisConnectionFactory; */ public class RedisReactiveHealthIndicator extends AbstractReactiveHealthIndicator { + private static final String REDIS_VERSION_PROPERTY = "redis_version"; + private final ReactiveRedisConnectionFactory connectionFactory; public RedisReactiveHealthIndicator(ReactiveRedisConnectionFactory connectionFactory) { @@ -52,8 +54,8 @@ public class RedisReactiveHealthIndicator extends AbstractReactiveHealthIndicato } private Mono doHealthCheck(Health.Builder builder, ReactiveRedisConnection connection) { - return connection.serverCommands().info() - .map((info) -> up(builder, info, (connection instanceof ReactiveRedisClusterConnection))) + boolean isClusterConnection = connection instanceof ReactiveRedisClusterConnection; + return connection.serverCommands().info().map((info) -> up(builder, info, isClusterConnection)) .onErrorResume((ex) -> Mono.just(down(builder, ex))) .flatMap((health) -> connection.closeLater().thenReturn(health)); } @@ -64,24 +66,22 @@ public class RedisReactiveHealthIndicator extends AbstractReactiveHealthIndicato } private Health up(Health.Builder builder, Properties info, boolean isClusterConnection) { - if (isClusterConnection) { - return builder.up().withDetail(RedisHealthIndicator.VERSION, getClusterVersionProperty(info)).build(); - } - else { - return builder.up() - .withDetail(RedisHealthIndicator.VERSION, info.getProperty(RedisHealthIndicator.REDIS_VERSION)) - .build(); - } - } - - private Object getClusterVersionProperty(Properties info) { - return info.keySet().stream().map(String.class::cast) - .filter((key) -> key.endsWith(RedisHealthIndicator.REDIS_VERSION)).findFirst().map(info::get) - .orElse(""); + String version = isClusterConnection ? getClusterVersionProperty(info) + : info.getProperty(REDIS_VERSION_PROPERTY); + return builder.up().withDetail("version", version).build(); } private Health down(Health.Builder builder, Throwable cause) { return builder.down(cause).build(); } + private String getClusterVersionProperty(Properties info) { + for (String propertyName : info.stringPropertyNames()) { + if (propertyName.endsWith(REDIS_VERSION_PROPERTY)) { + return info.getProperty(propertyName); + } + } + return ""; + } + }