Always use SimpleDriverDataSource when creating Liquibase DataSource
Closes gh-24944
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2020 the original author or authors.
|
||||
* Copyright 2012-2021 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.
|
||||
@@ -150,8 +150,8 @@ public class LiquibaseAutoConfiguration {
|
||||
String user = getProperty(this.properties::getUser, dataSourceProperties::determineUsername);
|
||||
String password = getProperty(this.properties::getPassword, dataSourceProperties::determinePassword);
|
||||
String driverClassName = determineDriverClassName(dataSourceProperties, url);
|
||||
return DataSourceBuilder.create().type(determineDataSourceType()).url(url).username(user).password(password)
|
||||
.driverClassName(driverClassName).build();
|
||||
return DataSourceBuilder.create().type(SimpleDriverDataSource.class).url(url).username(user)
|
||||
.password(password).driverClassName(driverClassName).build();
|
||||
}
|
||||
|
||||
private String determineDriverClassName(DataSourceProperties dataSourceProperties, String url) {
|
||||
@@ -164,11 +164,6 @@ public class LiquibaseAutoConfiguration {
|
||||
return StringUtils.hasText(url) ? DatabaseDriver.fromJdbcUrl(url).getDriverClassName() : null;
|
||||
}
|
||||
|
||||
private Class<? extends DataSource> determineDataSourceType() {
|
||||
Class<? extends DataSource> type = DataSourceBuilder.findType(null);
|
||||
return (type != null) ? type : SimpleDriverDataSource.class;
|
||||
}
|
||||
|
||||
private String getProperty(Supplier<String> property, Supplier<String> defaultValue) {
|
||||
String value = property.get();
|
||||
return (value != null) ? value : defaultValue.get();
|
||||
|
||||
@@ -25,7 +25,6 @@ import java.util.function.Consumer;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
|
||||
import com.zaxxer.hikari.HikariDataSource;
|
||||
import liquibase.integration.spring.SpringLiquibase;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.condition.EnabledOnJre;
|
||||
@@ -40,7 +39,6 @@ import org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfigurati
|
||||
import org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
|
||||
import org.springframework.boot.jdbc.DataSourceBuilder;
|
||||
import org.springframework.boot.test.context.FilteredClassLoader;
|
||||
import org.springframework.boot.test.context.assertj.AssertableApplicationContext;
|
||||
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
|
||||
import org.springframework.boot.test.context.runner.ContextConsumer;
|
||||
@@ -85,21 +83,8 @@ class LiquibaseAutoConfigurationTests {
|
||||
void createsDataSourceWithNoDataSourceBeanAndLiquibaseUrl() {
|
||||
this.contextRunner.withPropertyValues("spring.liquibase.url:jdbc:hsqldb:mem:liquibase")
|
||||
.run(assertLiquibase((liquibase) -> {
|
||||
DataSource dataSource = liquibase.getDataSource();
|
||||
assertThat(((HikariDataSource) dataSource).isClosed()).isTrue();
|
||||
assertThat(((HikariDataSource) dataSource).getJdbcUrl()).isEqualTo("jdbc:hsqldb:mem:liquibase");
|
||||
}));
|
||||
}
|
||||
|
||||
@Test
|
||||
void createsDataSourceWhenSpringJdbcOnlyAvailableWithNoDataSourceBeanAndLiquibaseUrl() {
|
||||
this.contextRunner.withPropertyValues("spring.liquibase.url:jdbc:hsqldb:mem:liquibase")
|
||||
.withClassLoader(new FilteredClassLoader("org.apache.tomcat", "com.zaxxer.hikari",
|
||||
"org.apache.commons.dbcp2", "oracle.ucp.jdbc"))
|
||||
.run(assertLiquibase((liquibase) -> {
|
||||
DataSource dataSource = liquibase.getDataSource();
|
||||
assertThat(dataSource).isInstanceOf(SimpleDriverDataSource.class);
|
||||
assertThat(((SimpleDriverDataSource) dataSource).getUrl()).isEqualTo("jdbc:hsqldb:mem:liquibase");
|
||||
SimpleDriverDataSource dataSource = (SimpleDriverDataSource) liquibase.getDataSource();
|
||||
assertThat(dataSource.getUrl()).isEqualTo("jdbc:hsqldb:mem:liquibase");
|
||||
}));
|
||||
}
|
||||
|
||||
@@ -208,11 +193,9 @@ class LiquibaseAutoConfigurationTests {
|
||||
this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class)
|
||||
.withPropertyValues("spring.liquibase.url:jdbc:hsqldb:mem:liquibase")
|
||||
.run(assertLiquibase((liquibase) -> {
|
||||
DataSource dataSource = liquibase.getDataSource();
|
||||
assertThat(((HikariDataSource) dataSource).isClosed()).isTrue();
|
||||
assertThat(((HikariDataSource) dataSource).getJdbcUrl()).isEqualTo("jdbc:hsqldb:mem:liquibase");
|
||||
assertThat(((HikariDataSource) dataSource).getDriverClassName())
|
||||
.isEqualTo("org.hsqldb.jdbc.JDBCDriver");
|
||||
SimpleDriverDataSource dataSource = (SimpleDriverDataSource) liquibase.getDataSource();
|
||||
assertThat(dataSource.getUrl()).isEqualTo("jdbc:hsqldb:mem:liquibase");
|
||||
assertThat(dataSource.getDriver().getClass().getName()).isEqualTo("org.hsqldb.jdbc.JDBCDriver");
|
||||
}));
|
||||
}
|
||||
|
||||
@@ -224,10 +207,9 @@ class LiquibaseAutoConfigurationTests {
|
||||
.withPropertyValues("spring.liquibase.url:" + jdbcUrl,
|
||||
"spring.liquibase.driver-class-name:" + driverClassName)
|
||||
.run(assertLiquibase((liquibase) -> {
|
||||
DataSource dataSource = liquibase.getDataSource();
|
||||
assertThat(((HikariDataSource) dataSource).isClosed()).isTrue();
|
||||
assertThat(((HikariDataSource) dataSource).getJdbcUrl()).isEqualTo(jdbcUrl);
|
||||
assertThat(((HikariDataSource) dataSource).getDriverClassName()).isEqualTo(driverClassName);
|
||||
SimpleDriverDataSource dataSource = (SimpleDriverDataSource) liquibase.getDataSource();
|
||||
assertThat(dataSource.getUrl()).isEqualTo(jdbcUrl);
|
||||
assertThat(dataSource.getDriver().getClass().getName()).isEqualTo(driverClassName);
|
||||
}));
|
||||
}
|
||||
|
||||
@@ -239,10 +221,9 @@ class LiquibaseAutoConfigurationTests {
|
||||
.withPropertyValues("spring.liquibase.url:" + jdbcUrl,
|
||||
"spring.datasource.driver-class-name:" + driverClassName)
|
||||
.run(assertLiquibase((liquibase) -> {
|
||||
DataSource dataSource = liquibase.getDataSource();
|
||||
assertThat(((HikariDataSource) dataSource).isClosed()).isTrue();
|
||||
assertThat(((HikariDataSource) dataSource).getJdbcUrl()).isEqualTo(jdbcUrl);
|
||||
assertThat(((HikariDataSource) dataSource).getDriverClassName()).isEqualTo(driverClassName);
|
||||
SimpleDriverDataSource dataSource = (SimpleDriverDataSource) liquibase.getDataSource();
|
||||
assertThat(dataSource.getUrl()).isEqualTo(jdbcUrl);
|
||||
assertThat(dataSource.getDriver().getClass().getName()).isEqualTo(driverClassName);
|
||||
}));
|
||||
}
|
||||
|
||||
@@ -253,10 +234,9 @@ class LiquibaseAutoConfigurationTests {
|
||||
.withPropertyValues("spring.datasource.url:" + jdbcUrl, "spring.datasource.username:not-sa",
|
||||
"spring.liquibase.user:sa")
|
||||
.run(assertLiquibase((liquibase) -> {
|
||||
DataSource dataSource = liquibase.getDataSource();
|
||||
assertThat(((HikariDataSource) dataSource).isClosed()).isTrue();
|
||||
assertThat(((HikariDataSource) dataSource).getJdbcUrl()).isEqualTo(jdbcUrl);
|
||||
assertThat(((HikariDataSource) dataSource).getUsername()).isEqualTo("sa");
|
||||
SimpleDriverDataSource dataSource = (SimpleDriverDataSource) liquibase.getDataSource();
|
||||
assertThat(dataSource.getUrl()).isEqualTo(jdbcUrl);
|
||||
assertThat(dataSource.getUsername()).isEqualTo("sa");
|
||||
}));
|
||||
}
|
||||
|
||||
@@ -265,10 +245,9 @@ class LiquibaseAutoConfigurationTests {
|
||||
this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class)
|
||||
.withPropertyValues("spring.liquibase.url:jdbc:hsqldb:mem:liquibase")
|
||||
.run(assertLiquibase((liquibase) -> {
|
||||
DataSource dataSource = liquibase.getDataSource();
|
||||
assertThat(((HikariDataSource) dataSource).isClosed()).isTrue();
|
||||
assertThat(((HikariDataSource) dataSource).getUsername()).isEqualTo("sa");
|
||||
assertThat(((HikariDataSource) dataSource).getPassword()).isEqualTo("");
|
||||
SimpleDriverDataSource dataSource = (SimpleDriverDataSource) liquibase.getDataSource();
|
||||
assertThat(dataSource.getUsername()).isEqualTo("sa");
|
||||
assertThat(dataSource.getPassword()).isEqualTo("");
|
||||
}));
|
||||
}
|
||||
|
||||
@@ -276,9 +255,8 @@ class LiquibaseAutoConfigurationTests {
|
||||
void overrideUserAndFallbackToEmbeddedProperties() {
|
||||
this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class)
|
||||
.withPropertyValues("spring.liquibase.user:sa").run(assertLiquibase((liquibase) -> {
|
||||
DataSource dataSource = liquibase.getDataSource();
|
||||
assertThat(((HikariDataSource) dataSource).isClosed()).isTrue();
|
||||
assertThat(((HikariDataSource) dataSource).getJdbcUrl()).startsWith("jdbc:h2:mem:");
|
||||
SimpleDriverDataSource dataSource = (SimpleDriverDataSource) liquibase.getDataSource();
|
||||
assertThat(dataSource.getUrl()).startsWith("jdbc:h2:mem:");
|
||||
}));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user