diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration.java index d9ac48c9b0a..975318995f3 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration.java @@ -79,6 +79,7 @@ import org.springframework.util.StringUtils; * @author Eddú Meléndez * @author Dominic Gunn * @author Dan Zheng + * @author András Deák * @since 1.1.0 */ @SuppressWarnings("deprecation") @@ -156,9 +157,10 @@ public class FlywayAutoConfiguration { private DataSource configureDataSource(FluentConfiguration configuration) { if (this.properties.isCreateDataSource()) { - String url = getProperty(this.properties::getUrl, this.dataSourceProperties::getUrl); - String user = getProperty(this.properties::getUser, this.dataSourceProperties::getUsername); - String password = getProperty(this.properties::getPassword, this.dataSourceProperties::getPassword); + String url = getProperty(this.properties::getUrl, this.dataSourceProperties::determineUrl); + String user = getProperty(this.properties::getUser, this.dataSourceProperties::determineUsername); + String password = getProperty(this.properties::getPassword, + this.dataSourceProperties::determinePassword); configuration.dataSource(url, user, password); if (!CollectionUtils.isEmpty(this.properties.getInitSqls())) { String initSql = StringUtils.collectionToDelimitedString(this.properties.getInitSqls(), "\n"); 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 4a414eb0fa4..c8d1aaf9728 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 @@ -61,6 +61,7 @@ import org.springframework.util.Assert; * @author Andy Wilkinson * @author Dominic Gunn * @author Dan Zheng + * @author András Deák * @since 1.1.0 */ @Configuration @@ -153,9 +154,9 @@ public class LiquibaseAutoConfiguration { } private DataSource createNewDataSource() { - String url = getProperty(this.properties::getUrl, this.dataSourceProperties::getUrl); - String user = getProperty(this.properties::getUser, this.dataSourceProperties::getUsername); - String password = getProperty(this.properties::getPassword, this.dataSourceProperties::getPassword); + String url = getProperty(this.properties::getUrl, this.dataSourceProperties::determineUrl); + String user = getProperty(this.properties::getUser, this.dataSourceProperties::determineUsername); + String password = getProperty(this.properties::getPassword, this.dataSourceProperties::determinePassword); return DataSourceBuilder.create().url(url).username(user).password(password).build(); } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfigurationTests.java index 076af512350..579db9c6334 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfigurationTests.java @@ -30,6 +30,7 @@ import org.flywaydb.core.api.callback.Callback; import org.flywaydb.core.api.callback.Context; import org.flywaydb.core.api.callback.Event; import org.flywaydb.core.api.callback.FlywayCallback; +import org.flywaydb.core.internal.jdbc.DriverDataSource; import org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform; import org.junit.Test; import org.mockito.InOrder; @@ -66,6 +67,7 @@ import static org.mockito.Mockito.mock; * @author Eddú Meléndez * @author Stephane Nicoll * @author Dominic Gunn + * @author András Deák */ @SuppressWarnings("deprecation") public class FlywayAutoConfigurationTests { @@ -98,6 +100,30 @@ public class FlywayAutoConfigurationTests { }); } + @Test + public void createDataSourceFallbackToEmbeddedProperties() { + this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class) + .withPropertyValues("spring.flyway.url:jdbc:hsqldb:mem:flywaytest").run((context) -> { + assertThat(context).hasSingleBean(Flyway.class); + assertThat(context.getBean(Flyway.class).getDataSource()).isNotNull(); + assertThat(((DriverDataSource) context.getBean(Flyway.class).getDataSource()).getUser()) + .isEqualTo("sa"); + assertThat(((DriverDataSource) context.getBean(Flyway.class).getDataSource()).getPassword()) + .isEqualTo(""); + }); + } + + @Test + public void createDataSourceWithUserAndFallbackToEmbeddedProperties() { + this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class) + .withPropertyValues("spring.flyway.user:sa").run((context) -> { + assertThat(context).hasSingleBean(Flyway.class); + assertThat(context.getBean(Flyway.class).getDataSource()).isNotNull(); + assertThat(((DriverDataSource) context.getBean(Flyway.class).getDataSource()).getUrl()) + .startsWith("jdbc:h2:mem:"); + }); + } + @Test public void flywayDataSource() { this.contextRunner 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 dff35ccced1..a99b8dc6b17 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 @@ -60,6 +60,7 @@ import static org.assertj.core.api.Assertions.assertThat; * @author Andy Wilkinson * @author Stephane Nicoll * @author Dominic Gunn + * @author András Deák */ public class LiquibaseAutoConfigurationTests { @@ -199,6 +200,28 @@ public class LiquibaseAutoConfigurationTests { })); } + @Test + public void overrideDataSourceAndFallbackToEmbeddedProperties() { + 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(""); + })); + } + + @Test + public 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:"); + })); + } + @Test public void overrideTestRollbackOnUpdate() { this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class) diff --git a/src/checkstyle/checkstyle-suppressions.xml b/src/checkstyle/checkstyle-suppressions.xml index 858ed62c323..5ab2de11dbb 100644 --- a/src/checkstyle/checkstyle-suppressions.xml +++ b/src/checkstyle/checkstyle-suppressions.xml @@ -35,4 +35,5 @@ +