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 5106c3d1d8..85aff52288 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 @@ -80,6 +80,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") @@ -130,9 +131,9 @@ public class FlywayAutoConfiguration { private DataSource configureDataSource(FluentConfiguration configuration, FlywayProperties properties, DataSourceProperties dataSourceProperties, DataSource flywayDataSource, DataSource dataSource) { if (properties.isCreateDataSource()) { - String url = getProperty(properties::getUrl, dataSourceProperties::getUrl); - String user = getProperty(properties::getUser, dataSourceProperties::getUsername); - String password = getProperty(properties::getPassword, dataSourceProperties::getPassword); + String url = getProperty(properties::getUrl, dataSourceProperties::determineUrl); + String user = getProperty(properties::getUser, dataSourceProperties::determineUsername); + String password = getProperty(properties::getPassword, dataSourceProperties::determinePassword); configuration.dataSource(url, user, password); if (!CollectionUtils.isEmpty(properties.getInitSqls())) { String initSql = StringUtils.collectionToDelimitedString(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 ee63171d9c..71d0b8a511 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 @@ -64,6 +64,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(proxyBeanMethods = false) @@ -149,9 +150,9 @@ public class LiquibaseAutoConfiguration { } private DataSource createNewDataSource(DataSourceProperties dataSourceProperties) { - String url = getProperty(this.properties::getUrl, dataSourceProperties::getUrl); - String user = getProperty(this.properties::getUser, dataSourceProperties::getUsername); - String password = getProperty(this.properties::getPassword, dataSourceProperties::getPassword); + String url = getProperty(this.properties::getUrl, dataSourceProperties::determineUrl); + String user = getProperty(this.properties::getUser, dataSourceProperties::determineUsername); + String password = getProperty(this.properties::getPassword, 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 56f50c0acf..5e3ac8cf94 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 @@ -70,6 +70,7 @@ import static org.mockito.Mockito.mock; * @author Eddú Meléndez * @author Stephane Nicoll * @author Dominic Gunn + * @author András Deák */ @SuppressWarnings("deprecation") class FlywayAutoConfigurationTests { @@ -112,6 +113,29 @@ class FlywayAutoConfigurationTests { }); } + @Test + void createDataSourceFallbackToEmbeddedProperties() { + this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class) + .withPropertyValues("spring.flyway.url:jdbc:hsqldb:mem:flywaytest").run((context) -> { + assertThat(context).hasSingleBean(Flyway.class); + DataSource dataSource = context.getBean(Flyway.class).getDataSource(); + assertThat(dataSource).isNotNull(); + assertThat(dataSource).hasFieldOrPropertyWithValue("user", "sa"); + assertThat(dataSource).hasFieldOrPropertyWithValue("password", ""); + }); + } + + @Test + void createDataSourceWithUserAndFallbackToEmbeddedProperties() { + this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class) + .withPropertyValues("spring.flyway.user:sa").run((context) -> { + assertThat(context).hasSingleBean(Flyway.class); + DataSource dataSource = context.getBean(Flyway.class).getDataSource(); + assertThat(dataSource).isNotNull(); + assertThat(dataSource).extracting("url").hasSize(1).first().asString().startsWith("jdbc:h2:mem:"); + }); + } + @Test 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 d5542959b2..53193472f9 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 @@ -64,6 +64,7 @@ import static org.assertj.core.api.Assertions.contentOf; * @author Andy Wilkinson * @author Stephane Nicoll * @author Dominic Gunn + * @author András Deák */ @ExtendWith(OutputCaptureExtension.class) class LiquibaseAutoConfigurationTests { @@ -209,6 +210,28 @@ class LiquibaseAutoConfigurationTests { })); } + @Test + 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 + 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 void overrideTestRollbackOnUpdate() { this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class)