DATAREDIS-507 - Do not destroy RedisConnectionFactory in RedisKeyValueAdapter.destroy.
Do not destroy RedisConnectionFactory which is likely managed outside of RedisKeyValueAdapter. This change makes sure to retain a working connection factory while shutting down message listeners as those try to unsubscribe on shutdown. Original Pull Request: #195
This commit is contained in:
committed by
Christoph Strobl
parent
c1476b701b
commit
ebbcd95c6d
@@ -84,6 +84,7 @@ import org.springframework.util.Assert;
|
||||
* Please use {@link RedisTemplate} for this purpose.
|
||||
*
|
||||
* @author Christoph Strobl
|
||||
* @author Mark Paluch
|
||||
* @since 1.7
|
||||
*/
|
||||
public class RedisKeyValueAdapter extends AbstractKeyValueAdapter
|
||||
@@ -447,13 +448,6 @@ public class RedisKeyValueAdapter extends AbstractKeyValueAdapter
|
||||
*/
|
||||
public void destroy() throws Exception {
|
||||
|
||||
if (redisOps instanceof RedisTemplate) {
|
||||
RedisConnectionFactory connectionFactory = ((RedisTemplate<?, ?>) redisOps).getConnectionFactory();
|
||||
if (connectionFactory instanceof DisposableBean) {
|
||||
((DisposableBean) connectionFactory).destroy();
|
||||
}
|
||||
}
|
||||
|
||||
this.expirationListener.destroy();
|
||||
this.messageListenerContainer.destroy();
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@ import java.util.Map;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.springframework.beans.factory.DisposableBean;
|
||||
import org.springframework.dao.DataAccessException;
|
||||
import org.springframework.data.annotation.Id;
|
||||
import org.springframework.data.annotation.Reference;
|
||||
@@ -86,6 +87,14 @@ public class RedisKeyValueAdapterTests {
|
||||
} catch (Exception e) {
|
||||
// ignore
|
||||
}
|
||||
|
||||
try {
|
||||
if (connectionFactory instanceof DisposableBean) {
|
||||
((DisposableBean) connectionFactory).destroy();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// ignore
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
/*
|
||||
* Copyright 2016 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.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.data.redis.core;
|
||||
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.runners.MockitoJUnitRunner;
|
||||
import org.springframework.data.redis.connection.RedisConnection;
|
||||
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
|
||||
|
||||
/**
|
||||
* Unit tests for {@link RedisKeyValueAdapter}.
|
||||
*
|
||||
* @author Mark Paluch
|
||||
*/
|
||||
@RunWith(MockitoJUnitRunner.class)
|
||||
public class RedisKeyValueAdapterUnitTests {
|
||||
|
||||
RedisTemplate<?, ?> redisTemplate;
|
||||
RedisKeyValueAdapter redisKeyValueAdapter;
|
||||
|
||||
@Mock JedisConnectionFactory jedisConnectionFactoryMock;
|
||||
@Mock RedisConnection redisConnectionMock;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
|
||||
redisTemplate = new RedisTemplate<Object, Object>();
|
||||
redisTemplate.setConnectionFactory(jedisConnectionFactoryMock);
|
||||
redisTemplate.afterPropertiesSet();
|
||||
|
||||
when(jedisConnectionFactoryMock.getConnection()).thenReturn(redisConnectionMock);
|
||||
when(redisConnectionMock.getConfig("notify-keyspace-events"))
|
||||
.thenReturn(Arrays.asList("notify-keyspace-events", "KEA"));
|
||||
|
||||
redisKeyValueAdapter = new RedisKeyValueAdapter(redisTemplate);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void destroyShouldNotDestroyConnectionFactory() throws Exception {
|
||||
|
||||
redisKeyValueAdapter.destroy();
|
||||
|
||||
verify(jedisConnectionFactoryMock, never()).destroy();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user