Skip to content

Commit 919913a

Browse files
committed
Polish "Add session property for ConfigureRedisAction"
See gh-17022
1 parent a0fabc9 commit 919913a

File tree

3 files changed

+35
-34
lines changed

3 files changed

+35
-34
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/RedisSessionConfiguration.java

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
2323
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
2424
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
25-
import org.springframework.boot.autoconfigure.session.RedisSessionProperties.ConfigurationStrategy;
2625
import org.springframework.boot.context.properties.EnableConfigurationProperties;
2726
import org.springframework.context.annotation.Bean;
2827
import org.springframework.context.annotation.Conditional;
@@ -52,6 +51,19 @@
5251
@EnableConfigurationProperties(RedisSessionProperties.class)
5352
class RedisSessionConfiguration {
5453

54+
@Bean
55+
@ConditionalOnMissingBean
56+
public ConfigureRedisAction configureRedisAction(RedisSessionProperties redisSessionProperties) {
57+
switch (redisSessionProperties.getConfigurationStrategy()) {
58+
case NOTIFY_KEYSPACE_EVENTS:
59+
return new ConfigureNotifyKeyspaceEventsAction();
60+
case NONE:
61+
return ConfigureRedisAction.NO_OP;
62+
}
63+
throw new IllegalStateException("Unsupported redis configuration strategy '"
64+
+ redisSessionProperties.getConfigurationStrategy() + "'.");
65+
}
66+
5567
@Configuration
5668
public static class SpringBootRedisHttpSessionConfiguration extends RedisHttpSessionConfiguration {
5769

@@ -66,19 +78,6 @@ public void customize(SessionProperties sessionProperties, RedisSessionPropertie
6678
setCleanupCron(redisSessionProperties.getCleanupCron());
6779
}
6880

69-
@Bean
70-
@ConditionalOnMissingBean
71-
public ConfigureRedisAction configureRedisAction(RedisSessionProperties redisSessionProperties) {
72-
ConfigurationStrategy strategy = redisSessionProperties.getConfigurationStrategy();
73-
if (strategy == ConfigurationStrategy.NOTIFY_KEYSPACE_EVENTS) {
74-
return new ConfigureNotifyKeyspaceEventsAction();
75-
}
76-
if (strategy == ConfigurationStrategy.NO_OP) {
77-
return ConfigureRedisAction.NO_OP;
78-
}
79-
throw new IllegalStateException("Strategy '" + strategy + "' is not supported.");
80-
}
81-
8281
}
8382

8483
}

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/RedisSessionProperties.java

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,10 @@ public class RedisSessionProperties {
4141
private RedisFlushMode flushMode = RedisFlushMode.ON_SAVE;
4242

4343
/**
44-
* Allows specifying a strategy for configuring and validating Redis.
44+
* The configure action to apply when no user defined ConfigureRedisAction bean is
45+
* present.
4546
*/
46-
private ConfigurationStrategy configurationStrategy = ConfigurationStrategy.NOTIFY_KEYSPACE_EVENTS;
47+
private ConfigureAction configureAction = ConfigureAction.NOTIFY_KEYSPACE_EVENTS;
4748

4849
/**
4950
* Cron expression for expired session cleanup job.
@@ -74,28 +75,29 @@ public void setCleanupCron(String cleanupCron) {
7475
this.cleanupCron = cleanupCron;
7576
}
7677

77-
public ConfigurationStrategy getConfigurationStrategy() {
78-
return this.configurationStrategy;
78+
public ConfigureAction getConfigurationStrategy() {
79+
return this.configureAction;
7980
}
8081

81-
public void setConfigurationStrategy(ConfigurationStrategy configurationStrategy) {
82-
this.configurationStrategy = configurationStrategy;
82+
public void setConfigurationStrategy(ConfigureAction configurationStrategy) {
83+
this.configureAction = configurationStrategy;
8384
}
8485

8586
/**
86-
* Allows specifying a strategy for configuring and validating Redis.
87+
* Strategies for configuring and validating Redis.
8788
*/
88-
public enum ConfigurationStrategy {
89+
public enum ConfigureAction {
8990

9091
/**
91-
* Do nothing.
92+
* Ensure that Redis Keyspace events for Generic commands and Expired events are
93+
* enabled.
9294
*/
93-
NO_OP,
95+
NOTIFY_KEYSPACE_EVENTS,
96+
9497
/**
95-
* Ensures that Redis Keyspace events for Generic commands and Expired events are
96-
* enabled.
98+
* No not attempt to apply any custom Redis configuration.
9799
*/
98-
NOTIFY_KEYSPACE_EVENTS
100+
NONE
99101

100102
}
101103

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/session/SessionAutoConfigurationRedisTests.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,7 @@ void redisSessionStoreWithCustomizations() {
9191
@Test
9292
void redisSessionConfigureNoStrategy() {
9393
this.contextRunner.withConfiguration(AutoConfigurations.of(RedisAutoConfiguration.class))
94-
.withPropertyValues("spring.session.store-type=redis",
95-
"spring.session.redis.configuration-strategy=no_op",
94+
.withPropertyValues("spring.session.store-type=redis", "spring.session.redis.configure-action=none",
9695
"spring.redis.port=" + redis.getFirstMappedPort())
9796
.run(validateStrategy(ConfigureRedisAction.NO_OP.getClass()));
9897
}
@@ -130,13 +129,14 @@ private ContextConsumer<AssertableWebApplicationContext> validateSpringSessionUs
130129
}
131130

132131
private ContextConsumer<AssertableWebApplicationContext> validateStrategy(
133-
Class<? extends ConfigureRedisAction> actionClass, Map.Entry... values) {
132+
Class<? extends ConfigureRedisAction> expectedConfigureRedisActionType, Map.Entry<?, ?>... expectedConfig) {
134133
return (context) -> {
135-
assertThat(context).hasSingleBean(ConfigureRedisAction.class).hasSingleBean(RedisConnectionFactory.class);
136-
assertThat(context.getBean(ConfigureRedisAction.class)).isInstanceOf(actionClass);
134+
assertThat(context).hasSingleBean(ConfigureRedisAction.class);
135+
assertThat(context).hasSingleBean(RedisConnectionFactory.class);
136+
assertThat(context.getBean(ConfigureRedisAction.class)).isInstanceOf(expectedConfigureRedisActionType);
137137
RedisConnection connection = context.getBean(RedisConnectionFactory.class).getConnection();
138-
if (values.length > 0) {
139-
assertThat(connection.getConfig("*")).contains(values);
138+
if (expectedConfig.length > 0) {
139+
assertThat(connection.getConfig("*")).contains(expectedConfig);
140140
}
141141
};
142142
}

0 commit comments

Comments
 (0)