Skip to content

Commit 8a9b31a

Browse files
evgeniychebanwilkinsona
authored andcommitted
Add liquibase driver class name property
See gh-23958
1 parent 97fbef6 commit 8a9b31a

File tree

3 files changed

+40
-1
lines changed

3 files changed

+40
-1
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
4545
import org.springframework.boot.context.properties.EnableConfigurationProperties;
4646
import org.springframework.boot.jdbc.DataSourceBuilder;
47+
import org.springframework.boot.jdbc.DatabaseDriver;
4748
import org.springframework.context.annotation.Bean;
4849
import org.springframework.context.annotation.Conditional;
4950
import org.springframework.context.annotation.Configuration;
@@ -66,6 +67,7 @@
6667
* @author Dan Zheng
6768
* @author András Deák
6869
* @author Ferenc Gratzer
70+
* @author Evgeniy Cheban
6971
* @since 1.1.0
7072
*/
7173
@Configuration(proxyBeanMethods = false)
@@ -147,14 +149,19 @@ private DataSource createNewDataSource(DataSourceProperties dataSourceProperties
147149
String user = getProperty(this.properties::getUser, dataSourceProperties::determineUsername);
148150
String password = getProperty(this.properties::getPassword, dataSourceProperties::determinePassword);
149151
return DataSourceBuilder.create().type(determineDataSourceType()).url(url).username(user).password(password)
150-
.build();
152+
.driverClassName(determineDriverClassName(url)).build();
151153
}
152154

153155
private Class<? extends DataSource> determineDataSourceType() {
154156
Class<? extends DataSource> type = DataSourceBuilder.findType(null);
155157
return (type != null) ? type : SimpleDriverDataSource.class;
156158
}
157159

160+
private String determineDriverClassName(String url) {
161+
String driverClassName = this.properties.getDriverClassName();
162+
return (driverClassName != null) ? driverClassName : DatabaseDriver.fromJdbcUrl(url).getDriverClassName();
163+
}
164+
158165
private String getProperty(Supplier<String> property, Supplier<String> defaultValue) {
159166
String value = property.get();
160167
return (value != null) ? value : defaultValue.get();

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseProperties.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
* @author Marcel Overdijk
3131
* @author Eddú Meléndez
3232
* @author Ferenc Gratzer
33+
* @author Evgeniy Cheban
3334
* @since 1.1.0
3435
*/
3536
@ConfigurationProperties(prefix = "spring.liquibase", ignoreUnknownFields = false)
@@ -96,6 +97,11 @@ public class LiquibaseProperties {
9697
*/
9798
private String password;
9899

100+
/**
101+
* Fully qualified name of the JDBC driver. Auto-detected based on the URL by default.
102+
*/
103+
private String driverClassName;
104+
99105
/**
100106
* JDBC URL of the database to migrate. If not set, the primary configured data source
101107
* is used.
@@ -226,6 +232,14 @@ public void setPassword(String password) {
226232
this.password = password;
227233
}
228234

235+
public String getDriverClassName() {
236+
return this.driverClassName;
237+
}
238+
239+
public void setDriverClassName(String driverClassName) {
240+
this.driverClassName = driverClassName;
241+
}
242+
229243
public String getUrl() {
230244
return this.url;
231245
}

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfigurationTests.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
* @author András Deák
7474
* @author Andrii Hrytsiuk
7575
* @author Ferenc Gratzer
76+
* @author Evgeniy Cheban
7677
*/
7778
@ExtendWith(OutputCaptureExtension.class)
7879
class LiquibaseAutoConfigurationTests {
@@ -222,6 +223,23 @@ void overrideDataSource() {
222223
DataSource dataSource = liquibase.getDataSource();
223224
assertThat(((HikariDataSource) dataSource).isClosed()).isTrue();
224225
assertThat(((HikariDataSource) dataSource).getJdbcUrl()).isEqualTo("jdbc:hsqldb:mem:liquibase");
226+
assertThat(((HikariDataSource) dataSource).getDriverClassName())
227+
.isEqualTo("org.hsqldb.jdbc.JDBCDriver");
228+
}));
229+
}
230+
231+
@Test
232+
void overrideDataSourceAndDriverClassName() {
233+
String jdbcUrl = "jdbc:hsqldb:mem:liquibase";
234+
String driverClassName = "org.hsqldb.jdbcDriver";
235+
this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class)
236+
.withPropertyValues("spring.liquibase.url:" + jdbcUrl,
237+
"spring.liquibase.driver-class-name:" + driverClassName)
238+
.run(assertLiquibase((liquibase) -> {
239+
DataSource dataSource = liquibase.getDataSource();
240+
assertThat(((HikariDataSource) dataSource).isClosed()).isTrue();
241+
assertThat(((HikariDataSource) dataSource).getJdbcUrl()).isEqualTo(jdbcUrl);
242+
assertThat(((HikariDataSource) dataSource).getDriverClassName()).isEqualTo(driverClassName);
225243
}));
226244
}
227245

0 commit comments

Comments
 (0)