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 ad6d137f5..ee9062768 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 @@ import org.springframework.util.ClassUtils; * @author Balázs Németh * @author Ruben Cervilla * @author Luis De Bello + * @author Andrea Como */ public class LettuceConnectionFactory implements InitializingBean, DisposableBean, RedisConnectionFactory, ReactiveRedisConnectionFactory { @@ -425,6 +426,10 @@ public class LettuceConnectionFactory @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 c787ed410..9076975c7 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 @@ -66,6 +66,7 @@ import org.springframework.test.util.ReflectionTestUtils; * @author Balázs Németh * @author Ruben Cervilla * @author Luis De Bello + * @author Andrea Como */ public class LettuceConnectionFactoryUnitTests { @@ -939,6 +940,27 @@ public class LettuceConnectionFactoryUnitTests { 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 {