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() {