diff --git a/pom.xml b/pom.xml index a67dc48660..46e7920183 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-redis - 3.2.0-SNAPSHOT + 3.2.x-2635-SNAPSHOT Spring Data Redis Spring Data module for Redis 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 e0b96cb413..8e1bccb9f8 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 @@ enum State { 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 JedisConnectionFactory(RedisClusterConfiguration clusterConfig, JedisClie @Override public void afterPropertiesSet() { + clientConfig = createClientConfig(getDatabase(), getRedisUsername(), getRedisPassword()); + if(isAutoStartup()) { + start(); + } } JedisClientConfig createSentinelClientConfig(SentinelConfiguration sentinelConfiguration) { @@ -853,6 +859,21 @@ public boolean isRedisClusterAware() { 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 4ffaeea41c..f494f6c1a4 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 boolean isRunning() { @Override public void afterPropertiesSet() { - // customization hook. initialization happens in start + if(isAutoStartup()) { + start(); + } } @Override @@ -1097,6 +1101,21 @@ public boolean isClusterAware() { 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 f5cf14a83c..a18b2ecb21 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 @@ void getConnectionShouldFailIfNotInitialized() { 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 e2e1058aa9..5141108061 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 @@ void createFullRedisSentinelConfiguration() { 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 {