diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/listener/RedisMessageListenerContainer.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/listener/RedisMessageListenerContainer.java index c058650a7..aa7bd513f 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/listener/RedisMessageListenerContainer.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/listener/RedisMessageListenerContainer.java @@ -52,7 +52,7 @@ import org.springframework.util.CollectionUtils; * the message dispatch being done through the task executor. * *

- * Note the container uses the connection in a lazy fashion (only if at least one listener is configured). + * Note the container uses the connection in a lazy fashion (the connection is used only if at least one listener is configured). * * @author Costin Leau */ @@ -63,7 +63,8 @@ public class RedisMessageListenerContainer implements InitializingBean, Disposab /** * Default thread name prefix: "RedisListeningContainer-". */ - public static final String DEFAULT_THREAD_NAME_PREFIX = ClassUtils.getShortName(RedisMessageListenerContainer.class) + "-"; + public static final String DEFAULT_THREAD_NAME_PREFIX = ClassUtils.getShortName(RedisMessageListenerContainer.class) + + "-"; private Executor subscriptionExecutor; @@ -299,26 +300,28 @@ public class RedisMessageListenerContainer implements InitializingBean, Disposab boolean debug = log.isDebugEnabled(); boolean started = false; - if (!listening) { - synchronized (monitor) { - if (!listening) { - if (channelMapping.size() > 0 || patternMapping.size() > 0) { - subscriptionExecutor.execute(subscriptionTask); - listening = true; - started = true; + if (isRunning()) { + if (!listening) { + synchronized (monitor) { + if (!listening) { + if (channelMapping.size() > 0 || patternMapping.size() > 0) { + subscriptionExecutor.execute(subscriptionTask); + listening = true; + started = true; + } + } + else { + listening = false; } - } - else { - listening = false; - } - } - if (debug) { - if (started) { - log.debug("Started listening for Redis messages"); } - else { - log.debug("Postpone listening for Redis messages until actual listeners are added"); + if (debug) { + if (started) { + log.debug("Started listening for Redis messages"); + } + else { + log.debug("Postpone listening for Redis messages until actual listeners are added"); + } } } } diff --git a/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/listener/PubSubTests.java b/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/listener/PubSubTests.java index eec7e5f94..75f1a744f 100644 --- a/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/listener/PubSubTests.java +++ b/spring-data-redis/src/test/java/org/springframework/data/keyvalue/redis/listener/PubSubTests.java @@ -71,6 +71,7 @@ public class PubSubTests { container = new RedisMessageListenerContainer(); container.setConnectionFactory(template.getConnectionFactory()); container.setBeanName("container"); + container.addMessageListener(adapter, Arrays.asList(new ChannelTopic(CHANNEL))); container.afterPropertiesSet(); } @@ -116,7 +117,6 @@ public class PubSubTests { @Test public void testContainerSubscribe() throws Exception { - container.addMessageListener(adapter, Arrays.asList(new ChannelTopic(CHANNEL))); // wait for the container to start the registration