From c88456a183d7c72f4d0b2bf1400c33c3be72c983 Mon Sep 17 00:00:00 2001 From: Vedran Pavic Date: Mon, 30 Sep 2019 05:51:29 +0200 Subject: [PATCH] Rework scheduling configurers into nested configuration This commit extracts scheduling configurers that are used in Redis and JDBC configurations into nested configuration classes in order to avoid bean method references. Resolves: #1516 --- .../http/RedisHttpSessionConfiguration.java | 29 ++++++++++++++----- .../http/JdbcHttpSessionConfiguration.java | 29 ++++++++++++++----- 2 files changed, 44 insertions(+), 14 deletions(-) diff --git a/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/config/annotation/web/http/RedisHttpSessionConfiguration.java b/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/config/annotation/web/http/RedisHttpSessionConfiguration.java index 677fc936..f50f75bf 100644 --- a/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/config/annotation/web/http/RedisHttpSessionConfiguration.java +++ b/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/config/annotation/web/http/RedisHttpSessionConfiguration.java @@ -80,9 +80,8 @@ import org.springframework.util.StringValueResolver; * @since 1.0 */ @Configuration(proxyBeanMethods = false) -@EnableScheduling public class RedisHttpSessionConfiguration extends SpringHttpSessionConfiguration - implements BeanClassLoaderAware, EmbeddedValueResolverAware, ImportAware, SchedulingConfigurer { + implements BeanClassLoaderAware, EmbeddedValueResolverAware, ImportAware { static final String DEFAULT_CLEANUP_CRON = "0 * * * * *"; @@ -280,11 +279,6 @@ public class RedisHttpSessionConfiguration extends SpringHttpSessionConfiguratio } } - @Override - public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { - taskRegistrar.addCronTask(() -> sessionRepository().cleanupExpiredSessions(), this.cleanupCron); - } - private RedisTemplate createRedisTemplate() { RedisTemplate redisTemplate = new RedisTemplate<>(); redisTemplate.setKeySerializer(new StringRedisSerializer()); @@ -350,4 +344,25 @@ public class RedisHttpSessionConfiguration extends SpringHttpSessionConfiguratio } + /** + * Configuration of scheduled job for cleaning up expired sessions. + */ + @EnableScheduling + @Configuration(proxyBeanMethods = false) + class SessionCleanupConfiguration implements SchedulingConfigurer { + + private final RedisIndexedSessionRepository sessionRepository; + + SessionCleanupConfiguration(RedisIndexedSessionRepository sessionRepository) { + this.sessionRepository = sessionRepository; + } + + @Override + public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { + taskRegistrar.addCronTask(this.sessionRepository::cleanupExpiredSessions, + RedisHttpSessionConfiguration.this.cleanupCron); + } + + } + } diff --git a/spring-session-jdbc/src/main/java/org/springframework/session/jdbc/config/annotation/web/http/JdbcHttpSessionConfiguration.java b/spring-session-jdbc/src/main/java/org/springframework/session/jdbc/config/annotation/web/http/JdbcHttpSessionConfiguration.java index 363dfe8b..4d7c1a3c 100644 --- a/spring-session-jdbc/src/main/java/org/springframework/session/jdbc/config/annotation/web/http/JdbcHttpSessionConfiguration.java +++ b/spring-session-jdbc/src/main/java/org/springframework/session/jdbc/config/annotation/web/http/JdbcHttpSessionConfiguration.java @@ -75,9 +75,8 @@ import org.springframework.util.StringValueResolver; * @see EnableJdbcHttpSession */ @Configuration(proxyBeanMethods = false) -@EnableScheduling public class JdbcHttpSessionConfiguration extends SpringHttpSessionConfiguration - implements BeanClassLoaderAware, EmbeddedValueResolverAware, ImportAware, SchedulingConfigurer { + implements BeanClassLoaderAware, EmbeddedValueResolverAware, ImportAware { static final String DEFAULT_CLEANUP_CRON = "0 * * * * *"; @@ -258,11 +257,6 @@ public class JdbcHttpSessionConfiguration extends SpringHttpSessionConfiguration this.saveMode = attributes.getEnum("saveMode"); } - @Override - public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { - taskRegistrar.addCronTask(() -> sessionRepository().cleanUpExpiredSessions(), this.cleanupCron); - } - private static JdbcTemplate createJdbcTemplate(DataSource dataSource) { JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); jdbcTemplate.afterPropertiesSet(); @@ -283,4 +277,25 @@ public class JdbcHttpSessionConfiguration extends SpringHttpSessionConfiguration return conversionService; } + /** + * Configuration of scheduled job for cleaning up expired sessions. + */ + @EnableScheduling + @Configuration(proxyBeanMethods = false) + class SessionCleanupConfiguration implements SchedulingConfigurer { + + private final JdbcIndexedSessionRepository sessionRepository; + + SessionCleanupConfiguration(JdbcIndexedSessionRepository sessionRepository) { + this.sessionRepository = sessionRepository; + } + + @Override + public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { + taskRegistrar.addCronTask(this.sessionRepository::cleanUpExpiredSessions, + JdbcHttpSessionConfiguration.this.cleanupCron); + } + + } + }