diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/init/ResourceDatabasePopulator.java b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/init/ResourceDatabasePopulator.java index d2c7d657e40..de1202d8ba2 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/init/ResourceDatabasePopulator.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/init/ResourceDatabasePopulator.java @@ -62,14 +62,25 @@ public class ResourceDatabasePopulator implements DatabasePopulator { /** * Construct a new {@code ResourceDatabasePopulator} with default settings. + * @since 4.0.3 */ public ResourceDatabasePopulator() { /* no-op */ } + /** + * Construct a new {@code ResourceDatabasePopulator} with default settings + * for the supplied scripts. + * @param scripts the scripts to execute to populate the database + * @since 4.0.3 + */ + public ResourceDatabasePopulator(Resource... scripts) { + this(); + this.scripts = Arrays.asList(scripts); + } + /** * Construct a new {@code ResourceDatabasePopulator} with the supplied values. - * * @param continueOnError flag to indicate that all failures in SQL should be * logged but not cause a failure * @param ignoreFailedDrops flag to indicate that a failed SQL {@code DROP} @@ -77,13 +88,14 @@ public class ResourceDatabasePopulator implements DatabasePopulator { * @param sqlScriptEncoding the encoding for the supplied SQL scripts, if * different from the platform encoding; may be {@code null} * @param scripts the scripts to execute to populate the database + * @since 4.0.3 */ public ResourceDatabasePopulator(boolean continueOnError, boolean ignoreFailedDrops, String sqlScriptEncoding, Resource... scripts) { + this(scripts); this.continueOnError = continueOnError; this.ignoreFailedDrops = ignoreFailedDrops; this.sqlScriptEncoding = sqlScriptEncoding; - this.scripts = Arrays.asList(scripts); } /** diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/init/package-info.java b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/init/package-info.java index 5b10fffff51..0e8491990b0 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/init/package-info.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/init/package-info.java @@ -1,8 +1,6 @@ /** - * * Provides extensible support for initializing databases through scripts. - * */ package org.springframework.jdbc.datasource.init; diff --git a/spring-jdbc/src/test/java/org/springframework/jdbc/datasource/init/AbstractDatabaseInitializationTests.java b/spring-jdbc/src/test/java/org/springframework/jdbc/datasource/init/AbstractDatabaseInitializationTests.java index 7d85f92cb21..5be6e26de80 100644 --- a/spring-jdbc/src/test/java/org/springframework/jdbc/datasource/init/AbstractDatabaseInitializationTests.java +++ b/spring-jdbc/src/test/java/org/springframework/jdbc/datasource/init/AbstractDatabaseInitializationTests.java @@ -26,6 +26,9 @@ import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; import org.springframework.transaction.support.TransactionSynchronizationManager; +import static org.hamcrest.Matchers.*; +import static org.junit.Assert.*; + /** * Abstract base class for integration tests involving database initialization. * @@ -36,8 +39,9 @@ public abstract class AbstractDatabaseInitializationTests { private final ClassRelativeResourceLoader resourceLoader = new ClassRelativeResourceLoader(getClass()); - protected EmbeddedDatabase db; - protected JdbcTemplate jdbcTemplate; + EmbeddedDatabase db; + + JdbcTemplate jdbcTemplate; @Before @@ -55,10 +59,26 @@ public abstract class AbstractDatabaseInitializationTests { db.shutdown(); } - protected abstract EmbeddedDatabaseType getEmbeddedDatabaseType(); + abstract EmbeddedDatabaseType getEmbeddedDatabaseType(); - protected Resource resource(String path) { + Resource resource(String path) { return resourceLoader.getResource(path); } + Resource defaultSchema() { + return resource("db-schema.sql"); + } + + Resource usersSchema() { + return resource("users-schema.sql"); + } + + void assertUsersDatabaseCreated(String... lastNames) { + for (String lastName : lastNames) { + assertThat("Did not find user with last name [" + lastName + "].", + jdbcTemplate.queryForObject("select count(0) from users where last_name = ?", Integer.class, lastName), + equalTo(1)); + } + } + } diff --git a/spring-jdbc/src/test/java/org/springframework/jdbc/datasource/init/AbstractDatabasePopulatorTests.java b/spring-jdbc/src/test/java/org/springframework/jdbc/datasource/init/AbstractDatabasePopulatorTests.java index f26116b54a6..63aea669d6d 100644 --- a/spring-jdbc/src/test/java/org/springframework/jdbc/datasource/init/AbstractDatabasePopulatorTests.java +++ b/spring-jdbc/src/test/java/org/springframework/jdbc/datasource/init/AbstractDatabasePopulatorTests.java @@ -20,7 +20,6 @@ import java.sql.Connection; import java.sql.SQLException; import org.junit.Test; -import org.springframework.core.io.Resource; import org.springframework.jdbc.datasource.DataSourceUtils; import org.springframework.transaction.support.TransactionSynchronizationManager; @@ -29,7 +28,8 @@ import static org.junit.Assert.*; import static org.mockito.Mockito.*; /** - * Abstract base class for integration tests for {@link ResourceDatabasePopulator}. + * Abstract base class for integration tests for {@link ResourceDatabasePopulator} + * and {@link DatabasePopulatorUtils}. * * @author Dave Syer * @author Sam Brannen @@ -141,7 +141,7 @@ public abstract class AbstractDatabasePopulatorTests extends AbstractDatabaseIni @Test public void constructorWithMultipleScriptResources() throws Exception { - final ResourceDatabasePopulator populator = new ResourceDatabasePopulator(false, false, null, usersSchema(), + final ResourceDatabasePopulator populator = new ResourceDatabasePopulator(usersSchema(), resource("users-data-with-comments.sql")); DatabasePopulatorUtils.execute(populator, db); assertUsersDatabaseCreated("Brannen", "Hoeller"); @@ -188,20 +188,4 @@ public abstract class AbstractDatabasePopulatorTests extends AbstractDatabaseIni assertEquals(name, jdbcTemplate.queryForObject("select NAME from T_TEST", String.class)); } - private void assertUsersDatabaseCreated(String... lastNames) { - for (String lastName : lastNames) { - assertThat("Did not find user with last name [" + lastName + "].", - jdbcTemplate.queryForObject("select count(0) from users where last_name = ?", Integer.class, lastName), - equalTo(1)); - } - } - - private Resource defaultSchema() { - return resource("db-schema.sql"); - } - - private Resource usersSchema() { - return resource("users-schema.sql"); - } - } diff --git a/spring-jdbc/src/test/java/org/springframework/jdbc/datasource/init/ScriptUtilsIntegrationTests.java b/spring-jdbc/src/test/java/org/springframework/jdbc/datasource/init/ScriptUtilsIntegrationTests.java index f7d8f180921..76f03a933d6 100644 --- a/spring-jdbc/src/test/java/org/springframework/jdbc/datasource/init/ScriptUtilsIntegrationTests.java +++ b/spring-jdbc/src/test/java/org/springframework/jdbc/datasource/init/ScriptUtilsIntegrationTests.java @@ -19,11 +19,9 @@ package org.springframework.jdbc.datasource.init; import java.sql.SQLException; import org.junit.Test; -import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; -import static org.hamcrest.Matchers.*; -import static org.junit.Assert.*; +import static org.springframework.jdbc.datasource.init.ScriptUtils.*; /** * Integration tests for {@link ScriptUtils}. @@ -39,20 +37,11 @@ public class ScriptUtilsIntegrationTests extends AbstractDatabaseInitializationT } @Test - public void executeSqlScript() throws SQLException { - ScriptUtils.executeSqlScript(db.getConnection(), resource("users-schema.sql")); - ScriptUtils.executeSqlScript(db.getConnection(), resource("test-data-with-multi-line-comments.sql")); + public void executeSqlScriptContainingMuliLineComments() throws SQLException { + executeSqlScript(db.getConnection(), usersSchema()); + executeSqlScript(db.getConnection(), resource("test-data-with-multi-line-comments.sql")); assertUsersDatabaseCreated("Hoeller", "Brannen"); } - private void assertUsersDatabaseCreated(String... lastNames) { - final JdbcTemplate jdbcTemplate = new JdbcTemplate(db); - for (String lastName : lastNames) { - assertThat("Did not find user with last name [" + lastName + "].", - jdbcTemplate.queryForObject("select count(0) from users where last_name = ?", Integer.class, lastName), - equalTo(1)); - } - } - }