From 2fea5a869d81ee5d632f5372009a3a56f1e2cf34 Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Thu, 30 Jun 2016 14:43:42 +0200 Subject: [PATCH] Polish "Add Spring Session JDBC database initializer" Closes gh-5879 --- .../session/JdbcSessionConfiguration.java | 3 ++ .../JdbcSessionDatabaseInitializer.java | 29 +++++++++---------- .../SessionAutoConfigurationJdbcTests.java | 27 ++--------------- 3 files changed, 20 insertions(+), 39 deletions(-) diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/JdbcSessionConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/JdbcSessionConfiguration.java index d35d8d2e9f5..5c20e9750d2 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/JdbcSessionConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/JdbcSessionConfiguration.java @@ -20,11 +20,13 @@ import javax.sql.DataSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Conditional; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.ResourceLoader; +import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.session.SessionRepository; import org.springframework.session.jdbc.config.annotation.web.http.JdbcHttpSessionConfiguration; @@ -36,6 +38,7 @@ import org.springframework.session.jdbc.config.annotation.web.http.JdbcHttpSessi * @author Vedran Pavic */ @Configuration +@ConditionalOnClass(JdbcTemplate.class) @ConditionalOnMissingBean(SessionRepository.class) @ConditionalOnBean(DataSource.class) @Conditional(SessionCondition.class) diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/JdbcSessionDatabaseInitializer.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/JdbcSessionDatabaseInitializer.java index cb4c93310e3..bac0adf0b6e 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/JdbcSessionDatabaseInitializer.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/JdbcSessionDatabaseInitializer.java @@ -52,22 +52,21 @@ public class JdbcSessionDatabaseInitializer { @PostConstruct protected void initialize() { - if (!this.properties.getJdbc().getInitializer().isEnabled()) { - return; + if (this.properties.getJdbc().getInitializer().isEnabled()) { + String platform = getDatabaseType(); + if ("hsql".equals(platform)) { + platform = "hsqldb"; + } + if ("postgres".equals(platform)) { + platform = "postgresql"; + } + ResourceDatabasePopulator populator = new ResourceDatabasePopulator(); + String schemaLocation = this.properties.getJdbc().getSchema(); + schemaLocation = schemaLocation.replace("@@platform@@", platform); + populator.addScript(this.resourceLoader.getResource(schemaLocation)); + populator.setContinueOnError(true); + DatabasePopulatorUtils.execute(populator, this.dataSource); } - String platform = getDatabaseType(); - if ("hsql".equals(platform)) { - platform = "hsqldb"; - } - if ("postgres".equals(platform)) { - platform = "postgresql"; - } - ResourceDatabasePopulator populator = new ResourceDatabasePopulator(); - String schemaLocation = this.properties.getJdbc().getSchema(); - schemaLocation = schemaLocation.replace("@@platform@@", platform); - populator.addScript(this.resourceLoader.getResource(schemaLocation)); - populator.setContinueOnError(true); - DatabasePopulatorUtils.execute(populator, this.dataSource); } private String getDatabaseType() { 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 23b083a657c..10381eae152 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 @@ -18,8 +18,6 @@ package org.springframework.boot.autoconfigure.session; import java.util.Arrays; -import javax.persistence.EntityManagerFactory; - import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -27,11 +25,9 @@ import org.junit.rules.ExpectedException; import org.springframework.beans.DirectFieldAccessor; import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration; import org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfiguration; -import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration; import org.springframework.jdbc.BadSqlGrammarException; import org.springframework.jdbc.core.JdbcOperations; import org.springframework.session.jdbc.JdbcOperationsSessionRepository; -import org.springframework.transaction.PlatformTransactionManager; import static org.assertj.core.api.Assertions.assertThat; @@ -39,11 +35,12 @@ import static org.assertj.core.api.Assertions.assertThat; * JDBC specific tests for {@link SessionAutoConfiguration}. * * @author Vedran Pavic + * @author Stephane Nicoll */ public class SessionAutoConfigurationJdbcTests extends AbstractSessionAutoConfigurationTests { @Rule - public ExpectedException expected = ExpectedException.none(); + public ExpectedException thrown = ExpectedException.none(); @Test public void defaultConfig() { @@ -58,24 +55,6 @@ public class SessionAutoConfigurationJdbcTests extends AbstractSessionAutoConfig .queryForList("select * from SPRING_SESSION")).isEmpty(); } - @Test - public void usingJpa() { - load(Arrays.>asList(EmbeddedDataSourceConfiguration.class, - HibernateJpaAutoConfiguration.class), - "spring.session.store-type=jdbc"); - PlatformTransactionManager transactionManager = this.context - .getBean(PlatformTransactionManager.class); - assertThat(transactionManager.toString().contains("JpaTransactionManager")) - .isTrue(); - assertThat(this.context.getBean(EntityManagerFactory.class)).isNotNull(); - JdbcOperationsSessionRepository repository = validateSessionRepository( - JdbcOperationsSessionRepository.class); - assertThat(new DirectFieldAccessor(repository).getPropertyValue("tableName")) - .isEqualTo("SPRING_SESSION"); - assertThat(this.context.getBean(JdbcOperations.class) - .queryForList("select * from SPRING_SESSION")).isEmpty(); - } - @Test public void disableDatabaseInitializer() { load(Arrays.asList(EmbeddedDataSourceConfiguration.class, @@ -86,7 +65,7 @@ public class SessionAutoConfigurationJdbcTests extends AbstractSessionAutoConfig JdbcOperationsSessionRepository.class); assertThat(new DirectFieldAccessor(repository).getPropertyValue("tableName")) .isEqualTo("SPRING_SESSION"); - this.expected.expect(BadSqlGrammarException.class); + this.thrown.expect(BadSqlGrammarException.class); assertThat(this.context.getBean(JdbcOperations.class) .queryForList("select * from SPRING_SESSION")).isEmpty(); }