diff --git a/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactory.java b/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactory.java index e0b96cb41..8e1bccb9f 100644 --- a/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactory.java +++ b/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactory.java @@ -118,6 +118,8 @@ public class JedisConnectionFactory private @Nullable ClusterTopologyProvider topologyProvider; private @Nullable ClusterCommandExecutor clusterCommandExecutor; + private int phase = DEFAULT_PHASE - 10; + /** * Constructs a new {@link JedisConnectionFactory} instance with default settings (default connection pooling). */ @@ -262,7 +264,11 @@ public class JedisConnectionFactory @Override public void afterPropertiesSet() { + clientConfig = createClientConfig(getDatabase(), getRedisUsername(), getRedisPassword()); + if(isAutoStartup()) { + start(); + } } JedisClientConfig createSentinelClientConfig(SentinelConfiguration sentinelConfiguration) { @@ -853,6 +859,21 @@ public class JedisConnectionFactory return RedisConfiguration.isClusterConfiguration(configuration); } + @Override + public int getPhase() { + return phase; + } + + /** + * Specify the lifecycle phase for pausing and resuming this executor. + * The default is {@link #DEFAULT_PHASE} - 10. + * @since 3.2 + * @see SmartLifecycle#getPhase() + */ + public void setPhase(int phase) { + this.phase = phase; + } + @Override public RedisSentinelConnection getSentinelConnection() { 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 4ffaeea41..f494f6c1a 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 @@ -128,6 +128,8 @@ public class LettuceConnectionFactory implements RedisConnectionFactory, Reactiv private PipeliningFlushPolicy pipeliningFlushPolicy = PipeliningFlushPolicy.flushEachCommand(); + private int phase = DEFAULT_PHASE - 10; + /** * Lifecycle state of this factory. */ @@ -400,7 +402,9 @@ public class LettuceConnectionFactory implements RedisConnectionFactory, Reactiv @Override public void afterPropertiesSet() { - // customization hook. initialization happens in start + if(isAutoStartup()) { + start(); + } } @Override @@ -1097,6 +1101,21 @@ public class LettuceConnectionFactory implements RedisConnectionFactory, Reactiv return RedisConfiguration.isClusterConfiguration(configuration); } + @Override + public int getPhase() { + return phase; + } + + /** + * Specify the lifecycle phase for pausing and resuming this executor. + * The default is {@link #DEFAULT_PHASE} - 10. + * @since 3.2 + * @see SmartLifecycle#getPhase() + */ + public void setPhase(int phase) { + this.phase = phase; + } + /** * @return the shared connection using {@literal byte[]} encoding for imperative API use. {@literal null} if * {@link #getShareNativeConnection() connection sharing} is disabled or when connected to Redis Cluster. diff --git a/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactoryUnitTests.java b/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactoryUnitTests.java index f5cf14a83..a18b2ecb2 100644 --- a/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactoryUnitTests.java +++ b/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactoryUnitTests.java @@ -326,14 +326,13 @@ class JedisConnectionFactoryUnitTests { assertThatIllegalStateException().isThrownBy(connectionFactory::getSentinelConnection); } - @Test // GH-2503 - void afterPropertiesSetDoesNotTriggerConnectionInitialization() { + @Test // GH-2503, GH-2635 + void afterPropertiesTriggersConnectionInitialization() { JedisConnectionFactory connectionFactory = new JedisConnectionFactory(); connectionFactory.afterPropertiesSet(); - assertThat(connectionFactory.isRunning()).isFalse(); - assertThatIllegalStateException().isThrownBy(() -> connectionFactory.getConnection()); + assertThat(connectionFactory.isRunning()).isTrue(); } private JedisConnectionFactory initSpyedConnectionFactory(RedisSentinelConfiguration sentinelConfig, 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 e2e1058aa..514110806 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 @@ -1227,14 +1227,13 @@ class LettuceConnectionFactoryUnitTests { assertThat(configuration).isEqualTo(expected); } - @Test // GH-2503 - void afterPropertiesSetDoesNotTriggerConnectionInitialization() { + @Test // GH-2503, GH-2635 + void afterPropertiesSetTriggersConnectionInitialization() { LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(); connectionFactory.afterPropertiesSet(); - assertThat(connectionFactory.isRunning()).isFalse(); - assertThatIllegalStateException().isThrownBy(() -> connectionFactory.getConnection()); + assertThat(connectionFactory.isRunning()).isTrue(); } static class CustomRedisConfiguration implements RedisConfiguration, WithHostAndPort {