diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactory.java b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactory.java index e39df82a87..7741edc4b7 100644 --- a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactory.java +++ b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactory.java @@ -90,6 +90,7 @@ * @author Balázs Németh * @author Ruben Cervilla * @author Luis De Bello + * @author Andrea Como */ public class LettuceConnectionFactory implements InitializingBean, DisposableBean, RedisConnectionFactory, ReactiveRedisConnectionFactory { @@ -432,6 +433,10 @@ protected LettuceClusterConnection doCreateLettuceClusterConnection( @Override public LettuceReactiveRedisConnection getReactiveConnection() { + if (isClusterAware()) { + return getReactiveClusterConnection(); + } + return getShareNativeConnection() ? new LettuceReactiveRedisConnection(getSharedReactiveConnection(), reactiveConnectionProvider) : new LettuceReactiveRedisConnection(reactiveConnectionProvider); diff --git a/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactoryUnitTests.java b/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactoryUnitTests.java index 0763597a8c..1ecf01d05e 100644 --- a/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactoryUnitTests.java +++ b/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactoryUnitTests.java @@ -67,6 +67,7 @@ * @author Balázs Németh * @author Ruben Cervilla * @author Luis De Bello + * @author Andrea Como */ public class LettuceConnectionFactoryUnitTests { @@ -942,6 +943,25 @@ public void maxRedirectsShouldBeSetOnClusterClientOptions() { assertThat(options.getTimeoutOptions().isApplyConnectionTimeout()).isFalse(); } + @Test // DATAREDIS-1142 + public void shouldFallbackToReactiveRedisClusterConnectionWhenGetReactiveConnectionWithClusterConfig() { + LettuceConnectionProvider connectionProviderMock = mock(LettuceConnectionProvider.class); + StatefulConnection statefulConnection = mock(StatefulConnection.class); + when(connectionProviderMock.getConnection(any())).thenReturn(statefulConnection); + LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(clusterConfig) { + @Override + protected LettuceConnectionProvider doCreateConnectionProvider(AbstractRedisClient client, + RedisCodec codec) { + return connectionProviderMock; + } + }; + connectionFactory.afterPropertiesSet(); + + LettuceReactiveRedisConnection reactiveConnection = connectionFactory.getReactiveConnection(); + + assertThat(reactiveConnection).isInstanceOf(LettuceReactiveRedisClusterConnection.class); + } + @Data @AllArgsConstructor static class CustomRedisConfiguration implements RedisConfiguration, WithHostAndPort {