Add liquibase driver class name property
See gh-23958
This commit is contained in:
committed by
Andy Wilkinson
parent
97fbef60d3
commit
8a9b31aa69
@@ -44,6 +44,7 @@ import org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfigurati
|
||||
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.boot.jdbc.DataSourceBuilder;
|
||||
import org.springframework.boot.jdbc.DatabaseDriver;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Conditional;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
@@ -66,6 +67,7 @@ import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
|
||||
* @author Dan Zheng
|
||||
* @author András Deák
|
||||
* @author Ferenc Gratzer
|
||||
* @author Evgeniy Cheban
|
||||
* @since 1.1.0
|
||||
*/
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
@@ -147,7 +149,7 @@ public class LiquibaseAutoConfiguration {
|
||||
String user = getProperty(this.properties::getUser, dataSourceProperties::determineUsername);
|
||||
String password = getProperty(this.properties::getPassword, dataSourceProperties::determinePassword);
|
||||
return DataSourceBuilder.create().type(determineDataSourceType()).url(url).username(user).password(password)
|
||||
.build();
|
||||
.driverClassName(determineDriverClassName(url)).build();
|
||||
}
|
||||
|
||||
private Class<? extends DataSource> determineDataSourceType() {
|
||||
@@ -155,6 +157,11 @@ public class LiquibaseAutoConfiguration {
|
||||
return (type != null) ? type : SimpleDriverDataSource.class;
|
||||
}
|
||||
|
||||
private String determineDriverClassName(String url) {
|
||||
String driverClassName = this.properties.getDriverClassName();
|
||||
return (driverClassName != null) ? driverClassName : DatabaseDriver.fromJdbcUrl(url).getDriverClassName();
|
||||
}
|
||||
|
||||
private String getProperty(Supplier<String> property, Supplier<String> defaultValue) {
|
||||
String value = property.get();
|
||||
return (value != null) ? value : defaultValue.get();
|
||||
|
||||
@@ -30,6 +30,7 @@ import org.springframework.util.Assert;
|
||||
* @author Marcel Overdijk
|
||||
* @author Eddú Meléndez
|
||||
* @author Ferenc Gratzer
|
||||
* @author Evgeniy Cheban
|
||||
* @since 1.1.0
|
||||
*/
|
||||
@ConfigurationProperties(prefix = "spring.liquibase", ignoreUnknownFields = false)
|
||||
@@ -96,6 +97,11 @@ public class LiquibaseProperties {
|
||||
*/
|
||||
private String password;
|
||||
|
||||
/**
|
||||
* Fully qualified name of the JDBC driver. Auto-detected based on the URL by default.
|
||||
*/
|
||||
private String driverClassName;
|
||||
|
||||
/**
|
||||
* JDBC URL of the database to migrate. If not set, the primary configured data source
|
||||
* is used.
|
||||
@@ -226,6 +232,14 @@ public class LiquibaseProperties {
|
||||
this.password = password;
|
||||
}
|
||||
|
||||
public String getDriverClassName() {
|
||||
return this.driverClassName;
|
||||
}
|
||||
|
||||
public void setDriverClassName(String driverClassName) {
|
||||
this.driverClassName = driverClassName;
|
||||
}
|
||||
|
||||
public String getUrl() {
|
||||
return this.url;
|
||||
}
|
||||
|
||||
@@ -73,6 +73,7 @@ import static org.assertj.core.api.Assertions.contentOf;
|
||||
* @author András Deák
|
||||
* @author Andrii Hrytsiuk
|
||||
* @author Ferenc Gratzer
|
||||
* @author Evgeniy Cheban
|
||||
*/
|
||||
@ExtendWith(OutputCaptureExtension.class)
|
||||
class LiquibaseAutoConfigurationTests {
|
||||
@@ -222,6 +223,23 @@ class LiquibaseAutoConfigurationTests {
|
||||
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");
|
||||
}));
|
||||
}
|
||||
|
||||
@Test
|
||||
void overrideDataSourceAndDriverClassName() {
|
||||
String jdbcUrl = "jdbc:hsqldb:mem:liquibase";
|
||||
String driverClassName = "org.hsqldb.jdbcDriver";
|
||||
this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class)
|
||||
.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);
|
||||
}));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user