From 3610fe50b74b9d7863f523575b74374ee9bb3f63 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Fri, 22 Jan 2021 11:40:44 +0000 Subject: [PATCH] Always use SimpleDriverDataSource when creating Liquibase DataSource Closes gh-24944 --- .../liquibase/LiquibaseAutoConfiguration.java | 11 +--- .../LiquibaseAutoConfigurationTests.java | 60 ++++++------------- 2 files changed, 22 insertions(+), 49 deletions(-) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration.java index 4dbbea9912..c78217f3b0 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration.java @@ -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 determineDataSourceType() { - Class type = DataSourceBuilder.findType(null); - return (type != null) ? type : SimpleDriverDataSource.class; - } - private String getProperty(Supplier property, Supplier defaultValue) { String value = property.get(); return (value != null) ? value : defaultValue.get(); diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfigurationTests.java index ffd89d60fb..f2945e518d 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfigurationTests.java @@ -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:"); })); }