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 {