Polish "Add Spring Session JDBC database initializer"

Closes gh-5879
This commit is contained in:
Stephane Nicoll 2016-06-30 14:43:42 +02:00
parent a251ea8bc7
commit 2fea5a869d
3 changed files with 20 additions and 39 deletions

View File

@ -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)

View File

@ -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() {

View File

@ -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.<Class<?>>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();
}