Skip to content

Commit 7e47d3b

Browse files
committed
Polish "Rework Spring Session auto-configuration to use customizers"
See gh-32554
1 parent ad87539 commit 7e47d3b

File tree

6 files changed

+95
-137
lines changed

6 files changed

+95
-137
lines changed

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

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -45,27 +45,21 @@
4545
@ConditionalOnMissingBean(SessionRepository.class)
4646
@ConditionalOnBean(HazelcastInstance.class)
4747
@EnableConfigurationProperties(HazelcastSessionProperties.class)
48+
@Import(HazelcastHttpSessionConfiguration.class)
4849
class HazelcastSessionConfiguration {
4950

50-
@Configuration(proxyBeanMethods = false)
51-
@Import(HazelcastHttpSessionConfiguration.class)
52-
static class SpringBootHazelcastHttpSessionConfiguration {
53-
54-
@Bean
55-
SessionRepositoryCustomizer<HazelcastIndexedSessionRepository> springBootSessionRepositoryCustomizer(
56-
SessionProperties sessionProperties, HazelcastSessionProperties hazelcastSessionProperties,
57-
ServerProperties serverProperties) {
58-
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
59-
return (sessionRepository) -> {
60-
map.from(sessionProperties
61-
.determineTimeout(() -> serverProperties.getServlet().getSession().getTimeout()))
62-
.to((timeout) -> sessionRepository.setDefaultMaxInactiveInterval((int) timeout.getSeconds()));
63-
map.from(hazelcastSessionProperties::getMapName).to(sessionRepository::setSessionMapName);
64-
map.from(hazelcastSessionProperties::getFlushMode).to(sessionRepository::setFlushMode);
65-
map.from(hazelcastSessionProperties::getSaveMode).to(sessionRepository::setSaveMode);
66-
};
67-
}
68-
51+
@Bean
52+
SessionRepositoryCustomizer<HazelcastIndexedSessionRepository> springBootSessionRepositoryCustomizer(
53+
SessionProperties sessionProperties, HazelcastSessionProperties hazelcastSessionProperties,
54+
ServerProperties serverProperties) {
55+
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
56+
return (sessionRepository) -> {
57+
map.from(sessionProperties.determineTimeout(() -> serverProperties.getServlet().getSession().getTimeout()))
58+
.to((timeout) -> sessionRepository.setDefaultMaxInactiveInterval((int) timeout.getSeconds()));
59+
map.from(hazelcastSessionProperties::getMapName).to(sessionRepository::setSessionMapName);
60+
map.from(hazelcastSessionProperties::getFlushMode).to(sessionRepository::setFlushMode);
61+
map.from(hazelcastSessionProperties::getSaveMode).to(sessionRepository::setSaveMode);
62+
};
6963
}
7064

7165
}

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

Lines changed: 14 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
@ConditionalOnMissingBean(SessionRepository.class)
5151
@ConditionalOnBean(DataSource.class)
5252
@EnableConfigurationProperties(JdbcSessionProperties.class)
53-
@Import(DatabaseInitializationDependencyConfigurer.class)
53+
@Import({ DatabaseInitializationDependencyConfigurer.class, JdbcHttpSessionConfiguration.class })
5454
class JdbcSessionConfiguration {
5555

5656
@Bean
@@ -63,25 +63,19 @@ JdbcSessionDataSourceScriptDatabaseInitializer jdbcSessionDataSourceScriptDataba
6363
return new JdbcSessionDataSourceScriptDatabaseInitializer(dataSourceToInitialize, properties);
6464
}
6565

66-
@Configuration(proxyBeanMethods = false)
67-
@Import(JdbcHttpSessionConfiguration.class)
68-
static class SpringBootJdbcHttpSessionConfiguration {
69-
70-
@Bean
71-
SessionRepositoryCustomizer<JdbcIndexedSessionRepository> springBootSessionRepositoryCustomizer(
72-
SessionProperties sessionProperties, JdbcSessionProperties jdbcSessionProperties,
73-
ServerProperties serverProperties) {
74-
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
75-
return (sessionRepository) -> {
76-
map.from(sessionProperties
77-
.determineTimeout(() -> serverProperties.getServlet().getSession().getTimeout()))
78-
.to((timeout) -> sessionRepository.setDefaultMaxInactiveInterval((int) timeout.getSeconds()));
79-
map.from(jdbcSessionProperties::getTableName).to(sessionRepository::setTableName);
80-
map.from(jdbcSessionProperties::getFlushMode).to(sessionRepository::setFlushMode);
81-
map.from(jdbcSessionProperties::getSaveMode).to(sessionRepository::setSaveMode);
82-
map.from(jdbcSessionProperties::getCleanupCron).to(sessionRepository::setCleanupCron);
83-
};
84-
}
66+
@Bean
67+
SessionRepositoryCustomizer<JdbcIndexedSessionRepository> springBootSessionRepositoryCustomizer(
68+
SessionProperties sessionProperties, JdbcSessionProperties jdbcSessionProperties,
69+
ServerProperties serverProperties) {
70+
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
71+
return (sessionRepository) -> {
72+
map.from(sessionProperties.determineTimeout(() -> serverProperties.getServlet().getSession().getTimeout()))
73+
.to((timeout) -> sessionRepository.setDefaultMaxInactiveInterval((int) timeout.getSeconds()));
74+
map.from(jdbcSessionProperties::getTableName).to(sessionRepository::setTableName);
75+
map.from(jdbcSessionProperties::getFlushMode).to(sessionRepository::setFlushMode);
76+
map.from(jdbcSessionProperties::getSaveMode).to(sessionRepository::setSaveMode);
77+
map.from(jdbcSessionProperties::getCleanupCron).to(sessionRepository::setCleanupCron);
78+
};
8579

8680
}
8781

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

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -43,25 +43,19 @@
4343
@ConditionalOnMissingBean(ReactiveSessionRepository.class)
4444
@ConditionalOnBean(ReactiveMongoOperations.class)
4545
@EnableConfigurationProperties(MongoSessionProperties.class)
46+
@Import(ReactiveMongoWebSessionConfiguration.class)
4647
class MongoReactiveSessionConfiguration {
4748

48-
@Configuration(proxyBeanMethods = false)
49-
@Import(ReactiveMongoWebSessionConfiguration.class)
50-
static class SpringBootMongoWebSessionConfiguration {
51-
52-
@Bean
53-
ReactiveSessionRepositoryCustomizer<ReactiveMongoSessionRepository> springBootSessionRepositoryCustomizer(
54-
SessionProperties sessionProperties, MongoSessionProperties mongoSessionProperties,
55-
ServerProperties serverProperties) {
56-
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
57-
return (sessionRepository) -> {
58-
map.from(sessionProperties
59-
.determineTimeout(() -> serverProperties.getReactive().getSession().getTimeout()))
60-
.to((timeout) -> sessionRepository.setMaxInactiveIntervalInSeconds((int) timeout.getSeconds()));
61-
map.from(mongoSessionProperties::getCollectionName).to(sessionRepository::setCollectionName);
62-
};
63-
}
64-
49+
@Bean
50+
ReactiveSessionRepositoryCustomizer<ReactiveMongoSessionRepository> springBootSessionRepositoryCustomizer(
51+
SessionProperties sessionProperties, MongoSessionProperties mongoSessionProperties,
52+
ServerProperties serverProperties) {
53+
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
54+
return (sessionRepository) -> {
55+
map.from(sessionProperties.determineTimeout(() -> serverProperties.getReactive().getSession().getTimeout()))
56+
.to((timeout) -> sessionRepository.setMaxInactiveIntervalInSeconds((int) timeout.getSeconds()));
57+
map.from(mongoSessionProperties::getCollectionName).to(sessionRepository::setCollectionName);
58+
};
6559
}
6660

6761
}

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

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -43,25 +43,19 @@
4343
@ConditionalOnMissingBean(SessionRepository.class)
4444
@ConditionalOnBean(MongoOperations.class)
4545
@EnableConfigurationProperties(MongoSessionProperties.class)
46+
@Import(MongoHttpSessionConfiguration.class)
4647
class MongoSessionConfiguration {
4748

48-
@Configuration(proxyBeanMethods = false)
49-
@Import(MongoHttpSessionConfiguration.class)
50-
static class SpringBootMongoHttpSessionConfiguration {
51-
52-
@Bean
53-
SessionRepositoryCustomizer<MongoIndexedSessionRepository> springBootSessionRepositoryCustomizer(
54-
SessionProperties sessionProperties, MongoSessionProperties mongoSessionProperties,
55-
ServerProperties serverProperties) {
56-
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
57-
return (sessionRepository) -> {
58-
map.from(sessionProperties
59-
.determineTimeout(() -> serverProperties.getServlet().getSession().getTimeout()))
60-
.to((timeout) -> sessionRepository.setMaxInactiveIntervalInSeconds((int) timeout.getSeconds()));
61-
map.from(mongoSessionProperties::getCollectionName).to(sessionRepository::setCollectionName);
62-
};
63-
}
64-
49+
@Bean
50+
SessionRepositoryCustomizer<MongoIndexedSessionRepository> springBootSessionRepositoryCustomizer(
51+
SessionProperties sessionProperties, MongoSessionProperties mongoSessionProperties,
52+
ServerProperties serverProperties) {
53+
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
54+
return (sessionRepository) -> {
55+
map.from(sessionProperties.determineTimeout(() -> serverProperties.getServlet().getSession().getTimeout()))
56+
.to((timeout) -> sessionRepository.setMaxInactiveIntervalInSeconds((int) timeout.getSeconds()));
57+
map.from(mongoSessionProperties::getCollectionName).to(sessionRepository::setCollectionName);
58+
};
6559
}
6660

6761
}

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

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -43,26 +43,20 @@
4343
@ConditionalOnMissingBean(ReactiveSessionRepository.class)
4444
@ConditionalOnBean(ReactiveRedisConnectionFactory.class)
4545
@EnableConfigurationProperties(RedisSessionProperties.class)
46+
@Import(RedisWebSessionConfiguration.class)
4647
class RedisReactiveSessionConfiguration {
4748

48-
@Configuration(proxyBeanMethods = false)
49-
@Import(RedisWebSessionConfiguration.class)
50-
static class SpringBootRedisWebSessionConfiguration {
51-
52-
@Bean
53-
ReactiveSessionRepositoryCustomizer<ReactiveRedisSessionRepository> springBootSessionRepositoryCustomizer(
54-
SessionProperties sessionProperties, RedisSessionProperties redisSessionProperties,
55-
ServerProperties serverProperties) {
56-
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
57-
return (sessionRepository) -> {
58-
map.from(sessionProperties
59-
.determineTimeout(() -> serverProperties.getReactive().getSession().getTimeout()))
60-
.to((timeout) -> sessionRepository.setDefaultMaxInactiveInterval((int) timeout.getSeconds()));
61-
map.from(redisSessionProperties::getNamespace).to(sessionRepository::setRedisKeyNamespace);
62-
map.from(redisSessionProperties::getSaveMode).to(sessionRepository::setSaveMode);
63-
};
64-
}
65-
49+
@Bean
50+
ReactiveSessionRepositoryCustomizer<ReactiveRedisSessionRepository> springBootSessionRepositoryCustomizer(
51+
SessionProperties sessionProperties, RedisSessionProperties redisSessionProperties,
52+
ServerProperties serverProperties) {
53+
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
54+
return (sessionRepository) -> {
55+
map.from(sessionProperties.determineTimeout(() -> serverProperties.getReactive().getSession().getTimeout()))
56+
.to((timeout) -> sessionRepository.setDefaultMaxInactiveInterval((int) timeout.getSeconds()));
57+
map.from(redisSessionProperties::getNamespace).to(sessionRepository::setRedisKeyNamespace);
58+
map.from(redisSessionProperties::getSaveMode).to(sessionRepository::setSaveMode);
59+
};
6660
}
6761

6862
}

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

Lines changed: 34 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -57,40 +57,35 @@ class RedisSessionConfiguration {
5757
@Configuration(proxyBeanMethods = false)
5858
@ConditionalOnProperty(prefix = "spring.session.redis", name = "repository-type", havingValue = "default",
5959
matchIfMissing = true)
60+
@Import(RedisHttpSessionConfiguration.class)
6061
static class DefaultRedisSessionConfiguration {
6162

62-
@Configuration(proxyBeanMethods = false)
63-
@Import(RedisHttpSessionConfiguration.class)
64-
static class SpringBootRedisHttpSessionConfiguration {
65-
66-
@Bean
67-
SessionRepositoryCustomizer<RedisSessionRepository> springBootSessionRepositoryCustomizer(
68-
SessionProperties sessionProperties, RedisSessionProperties redisSessionProperties,
69-
ServerProperties serverProperties) {
70-
String cleanupCron = redisSessionProperties.getCleanupCron();
71-
if (cleanupCron != null) {
72-
throw new InvalidConfigurationPropertyValueException("spring.session.redis.cleanup-cron",
73-
cleanupCron,
74-
"Cron-based cleanup is only supported when spring.session.redis.repository-type is set to "
75-
+ "indexed.");
76-
}
77-
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
78-
return (sessionRepository) -> {
79-
map.from(sessionProperties
80-
.determineTimeout(() -> serverProperties.getServlet().getSession().getTimeout()))
81-
.to(sessionRepository::setDefaultMaxInactiveInterval);
82-
map.from(redisSessionProperties::getNamespace).to(sessionRepository::setRedisKeyNamespace);
83-
map.from(redisSessionProperties::getFlushMode).to(sessionRepository::setFlushMode);
84-
map.from(redisSessionProperties::getSaveMode).to(sessionRepository::setSaveMode);
85-
};
63+
@Bean
64+
SessionRepositoryCustomizer<RedisSessionRepository> springBootSessionRepositoryCustomizer(
65+
SessionProperties sessionProperties, RedisSessionProperties redisSessionProperties,
66+
ServerProperties serverProperties) {
67+
String cleanupCron = redisSessionProperties.getCleanupCron();
68+
if (cleanupCron != null) {
69+
throw new InvalidConfigurationPropertyValueException("spring.session.redis.cleanup-cron", cleanupCron,
70+
"Cron-based cleanup is only supported when spring.session.redis.repository-type is set to "
71+
+ "indexed.");
8672
}
87-
73+
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
74+
return (sessionRepository) -> {
75+
map.from(sessionProperties
76+
.determineTimeout(() -> serverProperties.getServlet().getSession().getTimeout()))
77+
.to(sessionRepository::setDefaultMaxInactiveInterval);
78+
map.from(redisSessionProperties::getNamespace).to(sessionRepository::setRedisKeyNamespace);
79+
map.from(redisSessionProperties::getFlushMode).to(sessionRepository::setFlushMode);
80+
map.from(redisSessionProperties::getSaveMode).to(sessionRepository::setSaveMode);
81+
};
8882
}
8983

9084
}
9185

9286
@Configuration(proxyBeanMethods = false)
9387
@ConditionalOnProperty(prefix = "spring.session.redis", name = "repository-type", havingValue = "indexed")
88+
@Import(RedisIndexedHttpSessionConfiguration.class)
9489
static class IndexedRedisSessionConfiguration {
9590

9691
@Bean
@@ -102,27 +97,20 @@ ConfigureRedisAction configureRedisAction(RedisSessionProperties redisSessionPro
10297
};
10398
}
10499

105-
@Configuration(proxyBeanMethods = false)
106-
@Import(RedisIndexedHttpSessionConfiguration.class)
107-
static class SpringBootRedisIndexedHttpSessionConfiguration {
108-
109-
@Bean
110-
SessionRepositoryCustomizer<RedisIndexedSessionRepository> springBootSessionRepositoryCustomizer(
111-
SessionProperties sessionProperties, RedisSessionProperties redisSessionProperties,
112-
ServerProperties serverProperties) {
113-
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
114-
return (sessionRepository) -> {
115-
map.from(sessionProperties
116-
.determineTimeout(() -> serverProperties.getServlet().getSession().getTimeout()))
117-
.to((timeout) -> sessionRepository
118-
.setDefaultMaxInactiveInterval((int) timeout.getSeconds()));
119-
map.from(redisSessionProperties::getNamespace).to(sessionRepository::setRedisKeyNamespace);
120-
map.from(redisSessionProperties::getFlushMode).to(sessionRepository::setFlushMode);
121-
map.from(redisSessionProperties::getSaveMode).to(sessionRepository::setSaveMode);
122-
map.from(redisSessionProperties::getCleanupCron).to(sessionRepository::setCleanupCron);
123-
};
124-
}
125-
100+
@Bean
101+
SessionRepositoryCustomizer<RedisIndexedSessionRepository> springBootSessionRepositoryCustomizer(
102+
SessionProperties sessionProperties, RedisSessionProperties redisSessionProperties,
103+
ServerProperties serverProperties) {
104+
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
105+
return (sessionRepository) -> {
106+
map.from(sessionProperties
107+
.determineTimeout(() -> serverProperties.getServlet().getSession().getTimeout()))
108+
.to((timeout) -> sessionRepository.setDefaultMaxInactiveInterval((int) timeout.getSeconds()));
109+
map.from(redisSessionProperties::getNamespace).to(sessionRepository::setRedisKeyNamespace);
110+
map.from(redisSessionProperties::getFlushMode).to(sessionRepository::setFlushMode);
111+
map.from(redisSessionProperties::getSaveMode).to(sessionRepository::setSaveMode);
112+
map.from(redisSessionProperties::getCleanupCron).to(sessionRepository::setCleanupCron);
113+
};
126114
}
127115

128116
}

0 commit comments

Comments
 (0)