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/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/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; 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