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 757bdb153f..f7b5a93a2e 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 @@ -1,5 +1,5 @@ /* - * Copyright 2012-2017 the original author or authors. + * Copyright 2012-2019 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -46,14 +46,20 @@ public class RedisReactiveHealthIndicator extends AbstractReactiveHealthIndicato @Override protected Mono doHealthCheck(Health.Builder builder) { - Mono connection = Mono - .fromSupplier(this.connectionFactory::getReactiveConnection) - .subscribeOn(Schedulers.parallel()); + return getConnection() + .flatMap((connection) -> doHealthCheck(builder, connection)); + } - return connection - .flatMap((c) -> c.serverCommands().info().map((info) -> up(builder, info)) - .onErrorResume((e) -> Mono.just(builder.down(e).build())) - .flatMap((signal) -> c.closeLater().thenReturn(signal))); + private Mono doHealthCheck(Health.Builder builder, + ReactiveRedisConnection connection) { + return connection.serverCommands().info().map((info) -> up(builder, info)) + .onErrorResume((ex) -> Mono.just(down(builder, ex))) + .flatMap((health) -> connection.closeLater().thenReturn(health)); + } + + private Mono getConnection() { + return Mono.fromSupplier(this.connectionFactory::getReactiveConnection) + .subscribeOn(Schedulers.parallel()); } private Health up(Health.Builder builder, Properties info) { @@ -61,4 +67,8 @@ public class RedisReactiveHealthIndicator extends AbstractReactiveHealthIndicato info.getProperty(RedisHealthIndicator.REDIS_VERSION)).build(); } + private Health down(Health.Builder builder, Throwable cause) { + return builder.down(cause).build(); + } + }