diff --git a/pom.xml b/pom.xml
index 6e446970fc..0c43ef532c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.springframework.data
spring-data-redis
- 2.2.0.BUILD-SNAPSHOT
+ 2.2.0.DATAREDIS-1027-SNAPSHOT
Spring Data Redis
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 4513548e8f..2e4f80c725 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
@@ -299,16 +299,8 @@ public void destroy() {
resetConnection();
- if (connectionProvider instanceof DisposableBean) {
- try {
- ((DisposableBean) connectionProvider).destroy();
- } catch (Exception e) {
-
- if (log.isWarnEnabled()) {
- log.warn(connectionProvider + " did not shut down gracefully.", e);
- }
- }
- }
+ dispose(connectionProvider);
+ dispose(reactiveConnectionProvider);
try {
Duration quietPeriod = clientConfiguration.getShutdownQuietPeriod();
@@ -332,6 +324,20 @@ public void destroy() {
}
}
+ private void dispose(LettuceConnectionProvider connectionProvider) {
+
+ if (connectionProvider instanceof DisposableBean) {
+ try {
+ ((DisposableBean) connectionProvider).destroy();
+ } catch (Exception e) {
+
+ if (log.isWarnEnabled()) {
+ log.warn(connectionProvider + " did not shut down gracefully.", e);
+ }
+ }
+ }
+ }
+
/*
* (non-Javadoc)
* @see org.springframework.data.redis.connection.RedisConnectionFactory#getConnection()
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 5dc7499cb1..12e9670deb 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
@@ -48,6 +48,7 @@
import org.mockito.ArgumentMatchers;
import org.springframework.beans.DirectFieldAccessor;
+import org.springframework.beans.factory.DisposableBean;
import org.springframework.data.redis.ConnectionFactoryTracker;
import org.springframework.data.redis.connection.RedisClusterConfiguration;
import org.springframework.data.redis.connection.RedisClusterConnection;
@@ -805,6 +806,25 @@ protected LettuceConnectionProvider doCreateConnectionProvider(AbstractRedisClie
verify(connectionProviderMock, times(2)).getConnection(StatefulConnection.class);
}
+ @Test // DATAREDIS-1027
+ public void shouldDisposeConnectionProviders() throws Exception {
+
+ LettuceConnectionProvider connectionProviderMock = mock(LettuceConnectionProvider.class,
+ withSettings().extraInterfaces(DisposableBean.class));
+ LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory() {
+ @Override
+ protected LettuceConnectionProvider doCreateConnectionProvider(AbstractRedisClient client,
+ RedisCodec, ?> codec) {
+ return connectionProviderMock;
+ }
+ };
+
+ connectionFactory.afterPropertiesSet();
+ connectionFactory.destroy();
+
+ verify((DisposableBean) connectionProviderMock, times(2)).destroy();
+ }
+
@Test // DATAREDIS-842
public void databaseShouldBeSetCorrectlyOnSentinelClient() {