diff --git a/spring-integration-redis/src/main/java/org/springframework/integration/redis/util/RedisLockRegistry.java b/spring-integration-redis/src/main/java/org/springframework/integration/redis/util/RedisLockRegistry.java index ae90805d0fe..b5836c33b2d 100644 --- a/spring-integration-redis/src/main/java/org/springframework/integration/redis/util/RedisLockRegistry.java +++ b/spring-integration-redis/src/main/java/org/springframework/integration/redis/util/RedisLockRegistry.java @@ -164,6 +164,7 @@ protected boolean removeEldestEntry(Entry eldest) { private boolean executorExplicitlySet; private volatile boolean unlinkAvailable = true; + private volatile boolean isRunningRedisMessageListenerContainer = false; /** * Constructs a lock registry with the default (60 second) lock expiration. @@ -364,9 +365,9 @@ private boolean subscribeLock(long time) throws ExecutionException, InterruptedE return true; } - if (!RedisLockRegistry.this.redisMessageListenerContainer.isRunning()) { - RedisLockRegistry.this.redisMessageListenerContainer.afterPropertiesSet(); - RedisLockRegistry.this.redisMessageListenerContainer.start(); + if (!(RedisLockRegistry.this.isRunningRedisMessageListenerContainer + && RedisLockRegistry.this.redisMessageListenerContainer.isRunning())) { + runRedisMessageListenerContainer(); } while (time == -1 || expiredTime >= System.currentTimeMillis()) { try { @@ -523,6 +524,16 @@ private RedisLockRegistry getOuterType() { return RedisLockRegistry.this; } + private void runRedisMessageListenerContainer() { + synchronized (RedisLockRegistry.this.redisMessageListenerContainer) { + if (!(RedisLockRegistry.this.isRunningRedisMessageListenerContainer + && RedisLockRegistry.this.redisMessageListenerContainer.isRunning())) { + RedisLockRegistry.this.redisMessageListenerContainer.afterPropertiesSet(); + RedisLockRegistry.this.redisMessageListenerContainer.start(); + RedisLockRegistry.this.isRunningRedisMessageListenerContainer = true; + } + } + } } private static final class RedisUnLockNotifyMessageListener implements MessageListener {