Merge branch '1.5.x'

This commit is contained in:
Andy Wilkinson
2017-04-07 13:55:17 +01:00
4 changed files with 132 additions and 16 deletions

View File

@@ -42,7 +42,6 @@ import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ConfigurationCondition;
import org.springframework.core.type.AnnotatedTypeMetadata;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase;
import org.springframework.orm.jpa.AbstractEntityManagerFactoryBean;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
@@ -85,12 +84,6 @@ public class DevToolsDataSourceAutoConfiguration {
static final class NonEmbeddedInMemoryDatabaseShutdownExecutor
implements DisposableBean {
private static final Set<String> IN_MEMORY_DRIVER_CLASS_NAMES = new HashSet<>(
Arrays.asList("org.apache.derby.jdbc.EmbeddedDriver", "org.h2.Driver",
"org.h2.jdbcx.JdbcDataSource", "org.hsqldb.jdbcDriver",
"org.hsqldb.jdbc.JDBCDriver",
"org.hsqldb.jdbc.pool.JDBCXADataSource"));
private final DataSource dataSource;
private final DataSourceProperties dataSourceProperties;
@@ -109,9 +102,42 @@ public class DevToolsDataSourceAutoConfiguration {
}
private boolean dataSourceRequiresShutdown() {
return IN_MEMORY_DRIVER_CLASS_NAMES
.contains(this.dataSourceProperties.determineDriverClassName())
&& (!(this.dataSource instanceof EmbeddedDatabase));
for (InMemoryDatabase inMemoryDatabase : InMemoryDatabase.values()) {
if (inMemoryDatabase.matches(this.dataSourceProperties)) {
return true;
}
}
return false;
}
private static enum InMemoryDatabase {
DERBY(null, "org.apache.derby.jdbc.EmbeddedDriver"),
H2("jdbc:h2:mem:", "org.h2.Driver", "org.h2.jdbcx.JdbcDataSource"),
HQSQLDB("jdbc:hsqldb:mem:", "org.hsqldb.jdbcDriver",
"org.hsqldb.jdbc.JDBCDriver",
"org.hsqldb.jdbc.pool.JDBCXADataSource");
private final String urlPrefix;
private final Set<String> driverClassNames;
InMemoryDatabase(String urlPrefix, String... driverClassNames) {
this.urlPrefix = urlPrefix;
this.driverClassNames = new HashSet<String>(
Arrays.asList(driverClassNames));
}
boolean matches(DataSourceProperties properties) {
String url = properties.getUrl();
return (url == null || this.urlPrefix == null
|| url.startsWith(this.urlPrefix))
&& this.driverClassNames
.contains(properties.determineDriverClassName());
}
}
}