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 663976ddaf28..4a3383a38cbd 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 @@ * @author Eddú Meléndez * @author Dominic Gunn * @author Dan Zheng + * @author András Deák * @since 1.1.0 */ @SuppressWarnings("deprecation") @@ -163,11 +164,11 @@ public Flyway flyway() { private DataSource configureDataSource(FluentConfiguration configuration) { if (this.properties.isCreateDataSource()) { String url = getProperty(this.properties::getUrl, - this.dataSourceProperties::getUrl); + this.dataSourceProperties::determineUrl); String user = getProperty(this.properties::getUser, - this.dataSourceProperties::getUsername); + this.dataSourceProperties::determineUsername); String password = getProperty(this.properties::getPassword, - this.dataSourceProperties::getPassword); + this.dataSourceProperties::determinePassword); configuration.dataSource(url, user, password); if (!CollectionUtils.isEmpty(this.properties.getInitSqls())) { String initSql = StringUtils.collectionToDelimitedString( 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 f09f75f607f5..cc49092f10de 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 @@ * @author Andy Wilkinson * @author Dominic Gunn * @author Dan Zheng + * @author András Deák * @since 1.1.0 */ @Configuration @@ -163,11 +164,11 @@ private DataSource getDataSource() { private DataSource createNewDataSource() { String url = getProperty(this.properties::getUrl, - this.dataSourceProperties::getUrl); + this.dataSourceProperties::determineUrl); String user = getProperty(this.properties::getUser, - this.dataSourceProperties::getUsername); + this.dataSourceProperties::determineUsername); String password = getProperty(this.properties::getPassword, - this.dataSourceProperties::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 65dc98ddfe93..8693fe13060a 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.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 @@ * @author Eddú Meléndez * @author Stephane Nicoll * @author Dominic Gunn + * @author András Deák */ @SuppressWarnings("deprecation") public class FlywayAutoConfigurationTests { @@ -101,6 +103,31 @@ public void createDataSourceWithUser() { }); } + @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.withUserConfiguration(FlywayDataSourceConfiguration.class, 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 91dfd49e7e26..08fdd8b4d801 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 @@ * @author Andy Wilkinson * @author Stephane Nicoll * @author Dominic Gunn + * @author András Deák */ public class LiquibaseAutoConfigurationTests { @@ -221,6 +222,32 @@ public void overrideUser() { })); } + @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 858ed62c3236..5ab2de11dbb3 100644 --- a/src/checkstyle/checkstyle-suppressions.xml +++ b/src/checkstyle/checkstyle-suppressions.xml @@ -35,4 +35,5 @@ +