|
|
|
|
@ -16,6 +16,7 @@
@@ -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
@@ -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;
@@ -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 {
@@ -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,32 +107,40 @@ public class DataSourceInitializerTests {
@@ -104,32 +107,40 @@ public class DataSourceInitializerTests {
|
|
|
|
|
public void testDataSourceInitializedWithExplicitScript() throws Exception { |
|
|
|
|
this.context.register(DataSourceAutoConfiguration.class, |
|
|
|
|
PropertyPlaceholderAutoConfiguration.class); |
|
|
|
|
EnvironmentTestUtils.addEnvironment( |
|
|
|
|
this.context, |
|
|
|
|
"spring.datasource.initialize:true", |
|
|
|
|
"spring.datasource.schema:" |
|
|
|
|
+ ClassUtils.addResourcePathToPackagePath(getClass(), |
|
|
|
|
"schema.sql")); |
|
|
|
|
EnvironmentTestUtils |
|
|
|
|
.addEnvironment( |
|
|
|
|
this.context, |
|
|
|
|
"spring.datasource.initialize:true", |
|
|
|
|
"spring.datasource.schema:" |
|
|
|
|
+ ClassUtils.addResourcePathToPackagePath(getClass(), |
|
|
|
|
"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( |
|
|
|
|
this.context, |
|
|
|
|
"spring.datasource.initialize:true", |
|
|
|
|
"spring.datasource.schema:" |
|
|
|
|
+ ClassUtils.addResourcePathToPackagePath(getClass(), |
|
|
|
|
"schema.sql") |
|
|
|
|
+ "," |
|
|
|
|
+ ClassUtils.addResourcePathToPackagePath(getClass(), |
|
|
|
|
"another.sql")); |
|
|
|
|
EnvironmentTestUtils |
|
|
|
|
.addEnvironment( |
|
|
|
|
this.context, |
|
|
|
|
"spring.datasource.initialize:true", |
|
|
|
|
"spring.datasource.schema:" |
|
|
|
|
+ ClassUtils.addResourcePathToPackagePath(getClass(), |
|
|
|
|
"schema.sql") |
|
|
|
|
+ "," |
|
|
|
|
+ ClassUtils.addResourcePathToPackagePath(getClass(), |
|
|
|
|
"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 {
@@ -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 {
@@ -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 { |
|
|
|
|
|