-
Notifications
You must be signed in to change notification settings - Fork 41.7k
Closed
Description
As noted in the Spring Session configuration documentation, reactive indexed repositories can only be enabled through annotations, which limits the configuration flexibility via application.properties.
-
https://docs.spring.io/spring-session/reference/configuration/redis.html
-
https://docs.spring.io/spring-session/reference/configuration/reactive-redis-indexed.html
Additionally, the auto-configuration classes do not account for important properties such as configureRedisAction and namespace.
Simply adding the equivalent methods resolves this issue, as shown in the following configuration:
@Configuration(proxyBeanMethods = false)
@ConditionalOnProperty(prefix = "spring.session.redis", name = "repository-type", havingValue = "indexed")
@Import(RedisIndexedWebSessionConfiguration.class)
@EnableConfigurationProperties(RedisSessionProperties.class)
static class IndexedRedisSessionConfiguration {
@Bean
@ConditionalOnMissingBean
ConfigureReactiveRedisAction configureRedisAction(RedisSessionProperties redisSessionProperties) {
return switch (redisSessionProperties.getConfigureAction()) {
case NOTIFY_KEYSPACE_EVENTS -> new ConfigureNotifyKeyspaceEventsReactiveAction();
case NONE -> ConfigureReactiveRedisAction.NO_OP;
};
}
@Bean
@Order(Ordered.HIGHEST_PRECEDENCE)
ReactiveSessionRepositoryCustomizer<ReactiveRedisIndexedSessionRepository> springBootSessionRepositoryCustomizer(
SessionProperties sessionProperties, RedisSessionProperties redisSessionProperties,
ServerProperties serverProperties) {
return (sessionRepository) -> {
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
map.from(sessionProperties.determineTimeout(() -> serverProperties.getReactive().getSession().getTimeout()))
.to(sessionRepository::setDefaultMaxInactiveInterval);
map.from(redisSessionProperties::getNamespace).to(sessionRepository::setRedisKeyNamespace);
map.from(redisSessionProperties::getSaveMode).to(sessionRepository::setSaveMode);
};
}
}Additionally, it would be helpful to add a similar check for non-indexed repositories when the cleanup-cron property is enabled.
I can provide a PR if needed
Metadata
Metadata
Assignees
Labels
type: enhancementA general enhancementA general enhancement