Polishing

(cherry picked from commit 2f9ed59)
This commit is contained in:
Juergen Hoeller
2016-10-28 23:49:21 +02:00
parent 0ee8322947
commit 144f687ee9
8 changed files with 47 additions and 71 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2014 the original author or authors.
* Copyright 2002-2016 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -40,8 +40,8 @@ public abstract class DatabasePopulatorUtils {
* @throws DataAccessException if an error occurs, specifically a {@link ScriptException}
*/
public static void execute(DatabasePopulator populator, DataSource dataSource) throws DataAccessException {
Assert.notNull(populator, "DatabasePopulator must be provided");
Assert.notNull(dataSource, "DataSource must be provided");
Assert.notNull(populator, "DatabasePopulator must not be null");
Assert.notNull(dataSource, "DataSource must not be null");
try {
Connection connection = DataSourceUtils.getConnection(dataSource);
try {
@@ -53,11 +53,10 @@ public abstract class DatabasePopulatorUtils {
}
}
}
catch (Exception ex) {
catch (Throwable ex) {
if (ex instanceof ScriptException) {
throw (ScriptException) ex;
}
throw new UncategorizedScriptException("Failed to execute database script", ex);
}
}

View File

@@ -52,7 +52,7 @@ import org.springframework.util.StringUtils;
*/
public class ResourceDatabasePopulator implements DatabasePopulator {
private List<Resource> scripts = new ArrayList<Resource>();
List<Resource> scripts = new ArrayList<Resource>();
private String sqlScriptEncoding;
@@ -117,7 +117,7 @@ public class ResourceDatabasePopulator implements DatabasePopulator {
*/
public void addScript(Resource script) {
Assert.notNull(script, "Script must not be null");
getScripts().add(script);
this.scripts.add(script);
}
/**
@@ -126,7 +126,7 @@ public class ResourceDatabasePopulator implements DatabasePopulator {
*/
public void addScripts(Resource... scripts) {
assertContentsOfScriptArray(scripts);
getScripts().addAll(Arrays.asList(scripts));
this.scripts.addAll(Arrays.asList(scripts));
}
/**
@@ -140,6 +140,11 @@ public class ResourceDatabasePopulator implements DatabasePopulator {
this.scripts = new ArrayList<Resource>(Arrays.asList(scripts));
}
private void assertContentsOfScriptArray(Resource... scripts) {
Assert.notNull(scripts, "Scripts array must not be null");
Assert.noNullElements(scripts, "Scripts array must not contain null elements");
}
/**
* Specify the encoding for the configured SQL scripts, if different from the
* platform encoding.
@@ -220,6 +225,7 @@ public class ResourceDatabasePopulator implements DatabasePopulator {
this.ignoreFailedDrops = ignoreFailedDrops;
}
/**
* {@inheritDoc}
* @see #execute(DataSource)
@@ -227,10 +233,10 @@ public class ResourceDatabasePopulator implements DatabasePopulator {
@Override
public void populate(Connection connection) throws ScriptException {
Assert.notNull(connection, "Connection must not be null");
for (Resource script : getScripts()) {
ScriptUtils.executeSqlScript(connection, encodeScript(script), this.continueOnError,
this.ignoreFailedDrops, this.commentPrefix, this.separator, this.blockCommentStartDelimiter,
this.blockCommentEndDelimiter);
for (Resource script : this.scripts) {
EncodedResource encodedScript = new EncodedResource(script, this.sqlScriptEncoding);
ScriptUtils.executeSqlScript(connection, encodedScript, this.continueOnError, this.ignoreFailedDrops,
this.commentPrefix, this.separator, this.blockCommentStartDelimiter, this.blockCommentEndDelimiter);
}
}
@@ -244,28 +250,7 @@ public class ResourceDatabasePopulator implements DatabasePopulator {
* @see #populate(Connection)
*/
public void execute(DataSource dataSource) throws ScriptException {
Assert.notNull(dataSource, "DataSource must not be null");
DatabasePopulatorUtils.execute(this, dataSource);
}
final List<Resource> getScripts() {
return this.scripts;
}
/**
* {@link EncodedResource} is not a sub-type of {@link Resource}. Thus we
* always need to wrap each script resource in an {@code EncodedResource}
* using the configured {@linkplain #setSqlScriptEncoding encoding}.
* @param script the script to wrap (never {@code null})
*/
private EncodedResource encodeScript(Resource script) {
Assert.notNull(script, "Script must not be null");
return new EncodedResource(script, this.sqlScriptEncoding);
}
private void assertContentsOfScriptArray(Resource... scripts) {
Assert.notNull(scripts, "Scripts must not be null");
Assert.noNullElements(scripts, "Scripts array must not contain null elements");
}
}