Commit 84dd1f2d authored by Vedran Pavic's avatar Vedran Pavic Committed by Stephane Nicoll

Add support for configuring Spring Session JDBC flush mode

See gh-17797
parent 71cf0a3e
...@@ -67,6 +67,7 @@ class JdbcSessionConfiguration { ...@@ -67,6 +67,7 @@ class JdbcSessionConfiguration {
} }
setTableName(jdbcSessionProperties.getTableName()); setTableName(jdbcSessionProperties.getTableName());
setCleanupCron(jdbcSessionProperties.getCleanupCron()); setCleanupCron(jdbcSessionProperties.getCleanupCron());
setFlushMode(jdbcSessionProperties.getFlushMode());
setSaveMode(jdbcSessionProperties.getSaveMode()); setSaveMode(jdbcSessionProperties.getSaveMode());
} }
......
...@@ -18,6 +18,7 @@ package org.springframework.boot.autoconfigure.session; ...@@ -18,6 +18,7 @@ package org.springframework.boot.autoconfigure.session;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceInitializationMode; import org.springframework.boot.jdbc.DataSourceInitializationMode;
import org.springframework.session.FlushMode;
import org.springframework.session.SaveMode; import org.springframework.session.SaveMode;
/** /**
...@@ -56,6 +57,12 @@ public class JdbcSessionProperties { ...@@ -56,6 +57,12 @@ public class JdbcSessionProperties {
*/ */
private DataSourceInitializationMode initializeSchema = DataSourceInitializationMode.EMBEDDED; 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 * Sessions save mode. Determines how session changes are tracked and saved to the
* session store. * session store.
...@@ -94,6 +101,14 @@ public class JdbcSessionProperties { ...@@ -94,6 +101,14 @@ public class JdbcSessionProperties {
this.initializeSchema = initializeSchema; this.initializeSchema = initializeSchema;
} }
public FlushMode getFlushMode() {
return this.flushMode;
}
public void setFlushMode(FlushMode flushMode) {
this.flushMode = flushMode;
}
public SaveMode getSaveMode() { public SaveMode getSaveMode() {
return this.saveMode; return this.saveMode;
} }
......
...@@ -30,6 +30,7 @@ import org.springframework.boot.test.context.runner.WebApplicationContextRunner; ...@@ -30,6 +30,7 @@ import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.jdbc.BadSqlGrammarException; import org.springframework.jdbc.BadSqlGrammarException;
import org.springframework.jdbc.core.JdbcOperations; import org.springframework.jdbc.core.JdbcOperations;
import org.springframework.session.FlushMode;
import org.springframework.session.SaveMode; import org.springframework.session.SaveMode;
import org.springframework.session.data.mongo.MongoOperationsSessionRepository; import org.springframework.session.data.mongo.MongoOperationsSessionRepository;
import org.springframework.session.data.redis.RedisOperationsSessionRepository; import org.springframework.session.data.redis.RedisOperationsSessionRepository;
...@@ -130,6 +131,19 @@ class SessionAutoConfigurationJdbcTests extends AbstractSessionAutoConfiguration ...@@ -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 @Test
void customSaveMode() { void customSaveMode() {
this.contextRunner this.contextRunner
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment