From 4057dd198b1948fbced44cb0badc5d636b4d990d Mon Sep 17 00:00:00 2001 From: Madhura Bhave Date: Wed, 20 Jul 2022 15:35:22 -0700 Subject: [PATCH] Change preference of session store implementations The order has been determined based on usage statistics. Closes gh-27756 --- .../session/SessionAutoConfiguration.java | 4 ++-- .../SessionAutoConfigurationHazelcastTests.java | 4 ++-- .../session/SessionAutoConfigurationJdbcTests.java | 6 ++++++ .../session/SessionAutoConfigurationMongoTests.java | 6 ------ .../src/docs/asciidoc/web/spring-session.adoc | 10 +++++----- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/SessionAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/SessionAutoConfiguration.java index e281d3f34fa..98f95912721 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/SessionAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/SessionAutoConfiguration.java @@ -116,8 +116,8 @@ public class SessionAutoConfiguration { @Configuration(proxyBeanMethods = false) @ConditionalOnMissingBean(SessionRepository.class) - @Import({ RedisSessionConfiguration.class, MongoSessionConfiguration.class, HazelcastSessionConfiguration.class, - JdbcSessionConfiguration.class }) + @Import({ RedisSessionConfiguration.class, JdbcSessionConfiguration.class, HazelcastSessionConfiguration.class, + MongoSessionConfiguration.class }) static class ServletSessionRepositoryConfiguration { } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/session/SessionAutoConfigurationHazelcastTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/session/SessionAutoConfigurationHazelcastTests.java index 48fa1694d76..3b909e1d815 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/session/SessionAutoConfigurationHazelcastTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/session/SessionAutoConfigurationHazelcastTests.java @@ -58,9 +58,9 @@ class SessionAutoConfigurationHazelcastTests extends AbstractSessionAutoConfigur } @Test - void hazelcastTakesPrecedenceOverJdbc() { + void hazelcastTakesPrecedenceOverMongo() { this.contextRunner.withClassLoader( - new FilteredClassLoader(RedisIndexedSessionRepository.class, MongoIndexedSessionRepository.class)) + new FilteredClassLoader(RedisIndexedSessionRepository.class, JdbcIndexedSessionRepository.class)) .run(this::validateDefaultConfig); } 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 21f2142e75f..bbcd80d2d74 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 @@ -74,6 +74,12 @@ class SessionAutoConfigurationJdbcTests extends AbstractSessionAutoConfiguration this.contextRunner.run(this::validateDefaultConfig); } + @Test + void jdbcTakesPrecedenceOverMongoAndHazelcast() { + this.contextRunner.withClassLoader(new FilteredClassLoader(RedisIndexedSessionRepository.class)) + .run(this::validateDefaultConfig); + } + private void validateDefaultConfig(AssertableWebApplicationContext context) { JdbcIndexedSessionRepository repository = validateSessionRepository(context, JdbcIndexedSessionRepository.class); diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/session/SessionAutoConfigurationMongoTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/session/SessionAutoConfigurationMongoTests.java index 1fb10788a3b..f719d7dcf40 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/session/SessionAutoConfigurationMongoTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/session/SessionAutoConfigurationMongoTests.java @@ -63,12 +63,6 @@ class SessionAutoConfigurationMongoTests extends AbstractSessionAutoConfiguratio this.contextRunner.run(validateSpringSessionUsesMongo("sessions")); } - @Test - void mongoTakesPrecedenceOverJdbcAndHazelcast() { - this.contextRunner.withClassLoader(new FilteredClassLoader(RedisIndexedSessionRepository.class)) - .run(validateSpringSessionUsesMongo("sessions")); - } - @Test void defaultConfigWithCustomTimeout() { this.contextRunner.withPropertyValues("spring.session.timeout=1m") diff --git a/spring-boot-project/spring-boot-docs/src/docs/asciidoc/web/spring-session.adoc b/spring-boot-project/spring-boot-docs/src/docs/asciidoc/web/spring-session.adoc index d96f16468d8..ec7c2304b00 100644 --- a/spring-boot-project/spring-boot-docs/src/docs/asciidoc/web/spring-session.adoc +++ b/spring-boot-project/spring-boot-docs/src/docs/asciidoc/web/spring-session.adoc @@ -4,9 +4,9 @@ Spring Boot provides {spring-session}[Spring Session] auto-configuration for a w When building a servlet web application, the following stores can be auto-configured: * Redis -* MongoDB -* Hazelcast * JDBC +* Hazelcast +* MongoDB Additionally, {spring-boot-for-apache-geode}[Spring Boot for Apache Geode] provides {spring-boot-for-apache-geode-docs}#geode-session[auto-configuration for using Apache Geode as a session store]. @@ -16,10 +16,10 @@ If a single Spring Session module is present on the classpath, Spring Boot uses If you have more than one implementation, Spring Boot uses the following order for choosing a specific implementation: . Redis -. MongoDB -. Hazelcast . JDBC -. If none of Redis, MongoDB, Hazelcast and JDBC are available, we do not configure a `SessionRepository`. +. Hazelcast +. MongoDB +. If none of Redis, JDBC, Hazelcast and MongoDB are available, we do not configure a `SessionRepository`. When building a reactive web application, the following stores can be auto-configured: