Skip to content

Commit d98afb9

Browse files
christophstroblmp911de
authored andcommitted
Start RedisConnectionFactory through afterPropertiesSet.
This commit restores the behaviour of RedisConnectionFactories eager initialization via afterPropertiesSet. Additionally it is now possible to modify the lifecycle phase. Closes #2635 Original pull request: #2636
1 parent ce3c439 commit d98afb9

File tree

4 files changed

+47
-9
lines changed

4 files changed

+47
-9
lines changed

src/main/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactory.java

+21
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,8 @@ enum State {
118118
private @Nullable ClusterTopologyProvider topologyProvider;
119119
private @Nullable ClusterCommandExecutor clusterCommandExecutor;
120120

121+
private int phase = DEFAULT_PHASE - 10;
122+
121123
/**
122124
* Constructs a new {@link JedisConnectionFactory} instance with default settings (default connection pooling).
123125
*/
@@ -262,7 +264,11 @@ public JedisConnectionFactory(RedisClusterConfiguration clusterConfig, JedisClie
262264

263265
@Override
264266
public void afterPropertiesSet() {
267+
265268
clientConfig = createClientConfig(getDatabase(), getRedisUsername(), getRedisPassword());
269+
if(isAutoStartup()) {
270+
start();
271+
}
266272
}
267273

268274
JedisClientConfig createSentinelClientConfig(SentinelConfiguration sentinelConfiguration) {
@@ -853,6 +859,21 @@ public boolean isRedisClusterAware() {
853859
return RedisConfiguration.isClusterConfiguration(configuration);
854860
}
855861

862+
@Override
863+
public int getPhase() {
864+
return phase;
865+
}
866+
867+
/**
868+
* Specify the lifecycle phase for pausing and resuming this executor.
869+
* The default is {@link #DEFAULT_PHASE} - 10.
870+
* @since 3.2
871+
* @see SmartLifecycle#getPhase()
872+
*/
873+
public void setPhase(int phase) {
874+
this.phase = phase;
875+
}
876+
856877
@Override
857878
public RedisSentinelConnection getSentinelConnection() {
858879

src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactory.java

+20-1
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,8 @@ public class LettuceConnectionFactory implements RedisConnectionFactory, Reactiv
128128

129129
private PipeliningFlushPolicy pipeliningFlushPolicy = PipeliningFlushPolicy.flushEachCommand();
130130

131+
private int phase = DEFAULT_PHASE - 10;
132+
131133
/**
132134
* Lifecycle state of this factory.
133135
*/
@@ -400,7 +402,9 @@ public boolean isRunning() {
400402

401403
@Override
402404
public void afterPropertiesSet() {
403-
// customization hook. initialization happens in start
405+
if(isAutoStartup()) {
406+
start();
407+
}
404408
}
405409

406410
@Override
@@ -1097,6 +1101,21 @@ public boolean isClusterAware() {
10971101
return RedisConfiguration.isClusterConfiguration(configuration);
10981102
}
10991103

1104+
@Override
1105+
public int getPhase() {
1106+
return phase;
1107+
}
1108+
1109+
/**
1110+
* Specify the lifecycle phase for pausing and resuming this executor.
1111+
* The default is {@link #DEFAULT_PHASE} - 10.
1112+
* @since 3.2
1113+
* @see SmartLifecycle#getPhase()
1114+
*/
1115+
public void setPhase(int phase) {
1116+
this.phase = phase;
1117+
}
1118+
11001119
/**
11011120
* @return the shared connection using {@literal byte[]} encoding for imperative API use. {@literal null} if
11021121
* {@link #getShareNativeConnection() connection sharing} is disabled or when connected to Redis Cluster.

src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactoryUnitTests.java

+3-4
Original file line numberDiff line numberDiff line change
@@ -326,14 +326,13 @@ void getConnectionShouldFailIfNotInitialized() {
326326
assertThatIllegalStateException().isThrownBy(connectionFactory::getSentinelConnection);
327327
}
328328

329-
@Test // GH-2503
330-
void afterPropertiesSetDoesNotTriggerConnectionInitialization() {
329+
@Test // GH-2503, GH-2635
330+
void afterPropertiesTriggersConnectionInitialization() {
331331

332332
JedisConnectionFactory connectionFactory = new JedisConnectionFactory();
333333
connectionFactory.afterPropertiesSet();
334334

335-
assertThat(connectionFactory.isRunning()).isFalse();
336-
assertThatIllegalStateException().isThrownBy(() -> connectionFactory.getConnection());
335+
assertThat(connectionFactory.isRunning()).isTrue();
337336
}
338337

339338
private JedisConnectionFactory initSpyedConnectionFactory(RedisSentinelConfiguration sentinelConfig,

src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactoryUnitTests.java

+3-4
Original file line numberDiff line numberDiff line change
@@ -1227,14 +1227,13 @@ void createFullRedisSentinelConfiguration() {
12271227
assertThat(configuration).isEqualTo(expected);
12281228
}
12291229

1230-
@Test // GH-2503
1231-
void afterPropertiesSetDoesNotTriggerConnectionInitialization() {
1230+
@Test // GH-2503, GH-2635
1231+
void afterPropertiesSetTriggersConnectionInitialization() {
12321232

12331233
LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory();
12341234
connectionFactory.afterPropertiesSet();
12351235

1236-
assertThat(connectionFactory.isRunning()).isFalse();
1237-
assertThatIllegalStateException().isThrownBy(() -> connectionFactory.getConnection());
1236+
assertThat(connectionFactory.isRunning()).isTrue();
12381237
}
12391238

12401239
static class CustomRedisConfiguration implements RedisConfiguration, WithHostAndPort {

0 commit comments

Comments
 (0)