diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/SessionProperties.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/SessionProperties.java index 5134a91a337..84c9b1e98c6 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/SessionProperties.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/SessionProperties.java @@ -107,6 +107,8 @@ public class SessionProperties { private static final String DEFAULT_SCHEMA_LOCATION = "classpath:org/springframework/" + "session/jdbc/schema-@@platform@@.sql"; + private static final String DEFAULT_TABLE_NAME = "SPRING_SESSION"; + /** * Path to the SQL file to use to initialize the database schema. */ @@ -115,7 +117,7 @@ public class SessionProperties { /** * Name of database table used to store sessions. */ - private String tableName = "SPRING_SESSION"; + private String tableName = DEFAULT_TABLE_NAME; private final Initializer initializer = new Initializer(); @@ -139,7 +141,7 @@ public class SessionProperties { return this.initializer; } - public static class Initializer { + public class Initializer { /** * Create the required session tables on startup if necessary. @@ -147,7 +149,11 @@ public class SessionProperties { private boolean enabled = true; public boolean isEnabled() { - return this.enabled; + boolean isDefaultTableName = DEFAULT_TABLE_NAME.equals( + Jdbc.this.getTableName()); + boolean isDefaultSchema = DEFAULT_SCHEMA_LOCATION.equals( + Jdbc.this.getSchema()); + return this.enabled && (isDefaultTableName || !isDefaultSchema); } public void setEnabled(boolean enabled) { diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/session/SessionAutoConfigurationJdbcTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/session/SessionAutoConfigurationJdbcTests.java index 5c4477dce4b..03745f35cd7 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/session/SessionAutoConfigurationJdbcTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/session/SessionAutoConfigurationJdbcTests.java @@ -54,6 +54,8 @@ public class SessionAutoConfigurationJdbcTests JdbcOperationsSessionRepository.class); assertThat(new DirectFieldAccessor(repository).getPropertyValue("tableName")) .isEqualTo("SPRING_SESSION"); + assertThat(this.context.getBean(SessionProperties.class) + .getJdbc().getInitializer().isEnabled()).isTrue(); assertThat(this.context.getBean(JdbcOperations.class) .queryForList("select * from SPRING_SESSION")).isEmpty(); } @@ -68,6 +70,8 @@ public class SessionAutoConfigurationJdbcTests JdbcOperationsSessionRepository.class); assertThat(new DirectFieldAccessor(repository).getPropertyValue("tableName")) .isEqualTo("SPRING_SESSION"); + assertThat(this.context.getBean(SessionProperties.class) + .getJdbc().getInitializer().isEnabled()).isFalse(); this.thrown.expect(BadSqlGrammarException.class); assertThat(this.context.getBean(JdbcOperations.class) .queryForList("select * from SPRING_SESSION")).isEmpty(); @@ -84,8 +88,27 @@ public class SessionAutoConfigurationJdbcTests JdbcOperationsSessionRepository.class); assertThat(new DirectFieldAccessor(repository).getPropertyValue("tableName")) .isEqualTo("FOO_BAR"); + assertThat(this.context.getBean(SessionProperties.class) + .getJdbc().getInitializer().isEnabled()).isTrue(); assertThat(this.context.getBean(JdbcOperations.class) .queryForList("select * from FOO_BAR")).isEmpty(); } + @Test + public void customTableNameWithDefaultSchemaDisablesInitializer() { + load(Arrays.asList(EmbeddedDataSourceConfiguration.class, + DataSourceTransactionManagerAutoConfiguration.class), + "spring.session.store-type=jdbc", + "spring.session.jdbc.table-name=FOO_BAR"); + JdbcOperationsSessionRepository repository = validateSessionRepository( + JdbcOperationsSessionRepository.class); + assertThat(new DirectFieldAccessor(repository).getPropertyValue("tableName")) + .isEqualTo("FOO_BAR"); + assertThat(this.context.getBean(SessionProperties.class) + .getJdbc().getInitializer().isEnabled()).isFalse(); + this.thrown.expect(BadSqlGrammarException.class); + assertThat(this.context.getBean(JdbcOperations.class) + .queryForList("select * from SPRING_SESSION")).isEmpty(); + } + }