From 84dd1f2d29b2faa1ee34ec39d6ad284a21cb9fa1 Mon Sep 17 00:00:00 2001 From: Vedran Pavic Date: Tue, 6 Aug 2019 21:05:09 +0200 Subject: [PATCH 1/2] Add support for configuring Spring Session JDBC flush mode See gh-17797 --- .../session/JdbcSessionConfiguration.java | 1 + .../session/JdbcSessionProperties.java | 15 +++++++++++++++ .../SessionAutoConfigurationJdbcTests.java | 14 ++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/JdbcSessionConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/JdbcSessionConfiguration.java index 249e0a8c44c..6aab0a6bda4 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/JdbcSessionConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/JdbcSessionConfiguration.java @@ -67,6 +67,7 @@ class JdbcSessionConfiguration { } setTableName(jdbcSessionProperties.getTableName()); setCleanupCron(jdbcSessionProperties.getCleanupCron()); + setFlushMode(jdbcSessionProperties.getFlushMode()); setSaveMode(jdbcSessionProperties.getSaveMode()); } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/JdbcSessionProperties.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/JdbcSessionProperties.java index 7ac12ff8380..4a0dee835a6 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/JdbcSessionProperties.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/JdbcSessionProperties.java @@ -18,6 +18,7 @@ package org.springframework.boot.autoconfigure.session; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.jdbc.DataSourceInitializationMode; +import org.springframework.session.FlushMode; import org.springframework.session.SaveMode; /** @@ -56,6 +57,12 @@ public class JdbcSessionProperties { */ private DataSourceInitializationMode initializeSchema = DataSourceInitializationMode.EMBEDDED; + /** + * Sessions flush mode. Determines when session changes are written to the session + * store. + */ + private FlushMode flushMode = FlushMode.ON_SAVE; + /** * Sessions save mode. Determines how session changes are tracked and saved to the * session store. @@ -94,6 +101,14 @@ public class JdbcSessionProperties { this.initializeSchema = initializeSchema; } + public FlushMode getFlushMode() { + return this.flushMode; + } + + public void setFlushMode(FlushMode flushMode) { + this.flushMode = flushMode; + } + public SaveMode getSaveMode() { return this.saveMode; } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/session/SessionAutoConfigurationJdbcTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/session/SessionAutoConfigurationJdbcTests.java index 7653898b0ba..53573870b76 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/session/SessionAutoConfigurationJdbcTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/session/SessionAutoConfigurationJdbcTests.java @@ -30,6 +30,7 @@ import org.springframework.boot.test.context.runner.WebApplicationContextRunner; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.jdbc.BadSqlGrammarException; import org.springframework.jdbc.core.JdbcOperations; +import org.springframework.session.FlushMode; import org.springframework.session.SaveMode; import org.springframework.session.data.mongo.MongoOperationsSessionRepository; import org.springframework.session.data.redis.RedisOperationsSessionRepository; @@ -130,6 +131,19 @@ class SessionAutoConfigurationJdbcTests extends AbstractSessionAutoConfiguration }); } + @Test + void customFlushMode() { + this.contextRunner + .withPropertyValues("spring.session.store-type=jdbc", "spring.session.jdbc.flush-mode=immediate") + .run((context) -> { + assertThat(context.getBean(JdbcSessionProperties.class).getFlushMode()) + .isEqualTo(FlushMode.IMMEDIATE); + SpringBootJdbcHttpSessionConfiguration configuration = context + .getBean(SpringBootJdbcHttpSessionConfiguration.class); + assertThat(configuration).hasFieldOrPropertyWithValue("flushMode", FlushMode.IMMEDIATE); + }); + } + @Test void customSaveMode() { this.contextRunner From 85a289f71a1602bd044fdf6e180194e97adce065 Mon Sep 17 00:00:00 2001 From: Vedran Pavic Date: Tue, 6 Aug 2019 21:05:26 +0200 Subject: [PATCH 2/2] Harmonize Spring Session flush mode properties javadoc See gh-17797 --- .../boot/autoconfigure/session/HazelcastSessionProperties.java | 3 ++- .../boot/autoconfigure/session/RedisSessionProperties.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/HazelcastSessionProperties.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/HazelcastSessionProperties.java index bab82e9a87a..9cb4814c867 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/HazelcastSessionProperties.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/HazelcastSessionProperties.java @@ -35,7 +35,8 @@ public class HazelcastSessionProperties { private String mapName = "spring:session:sessions"; /** - * Sessions flush mode. + * Sessions flush mode. Determines when session changes are written to the session + * store. */ private FlushMode flushMode = FlushMode.ON_SAVE; diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/RedisSessionProperties.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/RedisSessionProperties.java index 0c1d60881e6..69d66a0bb1e 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/RedisSessionProperties.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/RedisSessionProperties.java @@ -37,7 +37,8 @@ public class RedisSessionProperties { private String namespace = "spring:session"; /** - * Sessions flush mode. + * Sessions flush mode. Determines when session changes are written to the session + * store. */ private FlushMode flushMode = FlushMode.ON_SAVE;