Merge branch '1.1.x'

pull/1347/head
Andy Wilkinson 10 years ago
commit ce02e86b89

@ -88,6 +88,10 @@ class DataSourceInitializer implements ApplicationListener<DataSourceInitialized
@Override
public void onApplicationEvent(DataSourceInitializedEvent event) {
if (!this.properties.isInitialize()) {
logger.debug("Initialization disabled (not running data scripts)");
return;
}
// NOTE the event can happen more than once and
// the event datasource is not used here
if (!this.initialized) {

@ -16,6 +16,7 @@
package org.springframework.boot.autoconfigure.jdbc;
import java.sql.SQLException;
import java.util.Random;
import javax.sql.DataSource;
@ -31,6 +32,7 @@ import org.springframework.context.annotation.AnnotationConfigApplicationContext
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.BadSqlGrammarException;
import org.springframework.jdbc.core.JdbcOperations;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.util.ClassUtils;
@ -38,6 +40,7 @@ import org.springframework.util.ClassUtils;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
/**
* Tests for {@link DataSourceInitializer}.
@ -96,7 +99,7 @@ public class DataSourceInitializerTests {
assertTrue(dataSource instanceof org.apache.tomcat.jdbc.pool.DataSource);
assertNotNull(dataSource);
JdbcOperations template = new JdbcTemplate(dataSource);
assertEquals(new Integer(0),
assertEquals(new Integer(1),
template.queryForObject("SELECT COUNT(*) from BAR", Integer.class));
}
@ -104,24 +107,29 @@ public class DataSourceInitializerTests {
public void testDataSourceInitializedWithExplicitScript() throws Exception {
this.context.register(DataSourceAutoConfiguration.class,
PropertyPlaceholderAutoConfiguration.class);
EnvironmentTestUtils.addEnvironment(
EnvironmentTestUtils
.addEnvironment(
this.context,
"spring.datasource.initialize:true",
"spring.datasource.schema:"
+ ClassUtils.addResourcePathToPackagePath(getClass(),
"schema.sql"));
"schema.sql"),
"spring.datasource.data:"
+ ClassUtils.addResourcePathToPackagePath(getClass(),
"data.sql"));
this.context.refresh();
DataSource dataSource = this.context.getBean(DataSource.class);
assertTrue(dataSource instanceof org.apache.tomcat.jdbc.pool.DataSource);
assertNotNull(dataSource);
JdbcOperations template = new JdbcTemplate(dataSource);
assertEquals(new Integer(0),
assertEquals(new Integer(1),
template.queryForObject("SELECT COUNT(*) from FOO", Integer.class));
}
@Test
public void testDataSourceInitializedWithMultipleScripts() throws Exception {
EnvironmentTestUtils.addEnvironment(
EnvironmentTestUtils
.addEnvironment(
this.context,
"spring.datasource.initialize:true",
"spring.datasource.schema:"
@ -129,7 +137,10 @@ public class DataSourceInitializerTests {
"schema.sql")
+ ","
+ ClassUtils.addResourcePathToPackagePath(getClass(),
"another.sql"));
"another.sql"),
"spring.datasource.data:"
+ ClassUtils.addResourcePathToPackagePath(getClass(),
"data.sql"));
this.context.register(DataSourceAutoConfiguration.class,
PropertyPlaceholderAutoConfiguration.class);
this.context.refresh();
@ -137,7 +148,7 @@ public class DataSourceInitializerTests {
assertTrue(dataSource instanceof org.apache.tomcat.jdbc.pool.DataSource);
assertNotNull(dataSource);
JdbcOperations template = new JdbcTemplate(dataSource);
assertEquals(new Integer(0),
assertEquals(new Integer(1),
template.queryForObject("SELECT COUNT(*) from FOO", Integer.class));
assertEquals(new Integer(0),
template.queryForObject("SELECT COUNT(*) from SPAM", Integer.class));
@ -170,6 +181,31 @@ public class DataSourceInitializerTests {
template.queryForObject("SELECT name from BAR WHERE id=2", String.class));
}
@Test
public void testInitializationDisabled() throws Exception {
this.context.register(DataSourceAutoConfiguration.class,
PropertyPlaceholderAutoConfiguration.class);
this.context.refresh();
DataSource dataSource = this.context.getBean(DataSource.class);
this.context.publishEvent(new DataSourceInitializedEvent(dataSource));
assertTrue(dataSource instanceof org.apache.tomcat.jdbc.pool.DataSource);
assertNotNull(dataSource);
JdbcOperations template = new JdbcTemplate(dataSource);
try {
template.queryForObject("SELECT COUNT(*) from BAR", Integer.class);
fail("Query should have failed as BAR table does not exist");
}
catch (BadSqlGrammarException ex) {
SQLException sqlException = ex.getSQLException();
int expectedCode = -5501; // user lacks privilege or object not found
assertEquals(expectedCode, sqlException.getErrorCode());
}
}
@Configuration
@EnableConfigurationProperties
protected static class TwoDataSources {

@ -0,0 +1 @@
INSERT INTO BAR VALUES (1, 'Andy');
Loading…
Cancel
Save