From 92d94797651f62019e946a21d0d7919842a6ebfc Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Mon, 9 Apr 2018 10:34:12 +0200 Subject: [PATCH] Gracefully handle exclusion of DataSourceAutoConfiguration This commit makes sure that an auto-configuration that requires `DataSourceProperties` will not break if `DataSourceAutoConfiguration` has been explicitly excluded. Closes gh-12512 --- .../autoconfigure/flyway/FlywayAutoConfiguration.java | 2 +- .../liquibase/LiquibaseAutoConfiguration.java | 2 +- .../flyway/FlywayAutoConfigurationTests.java | 10 ++++++++++ .../liquibase/LiquibaseAutoConfigurationTests.java | 11 +++++++++++ ...tractDevToolsDataSourceAutoConfigurationTests.java | 11 ----------- 5 files changed, 23 insertions(+), 13 deletions(-) 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 e2a37fc846..e5479db613 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 @@ -94,7 +94,7 @@ public class FlywayAutoConfiguration { @Configuration @ConditionalOnMissingBean(Flyway.class) - @EnableConfigurationProperties(FlywayProperties.class) + @EnableConfigurationProperties({ DataSourceProperties.class, FlywayProperties.class }) public static class FlywayConfiguration { private final FlywayProperties properties; 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 40ad4e4b9a..c1aa4c8c04 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 @@ -80,7 +80,7 @@ public class LiquibaseAutoConfiguration { @Configuration @ConditionalOnMissingBean(SpringLiquibase.class) - @EnableConfigurationProperties(LiquibaseProperties.class) + @EnableConfigurationProperties({ DataSourceProperties.class, LiquibaseProperties.class }) @Import(LiquibaseJpaDependencyConfiguration.class) public static class LiquibaseConfiguration { 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 a082b776a3..90f2e8b864 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 @@ -105,6 +105,16 @@ public class FlywayAutoConfigurationTests { }); } + @Test + public void flywayDataSourceWithoutDataSourceAutoConfiguration() { + this.contextRunner.withUserConfiguration(FlywayDataSourceConfiguration.class) + .run((context) -> { + assertThat(context).hasSingleBean(Flyway.class); + assertThat(context.getBean(Flyway.class).getDataSource()) + .isEqualTo(context.getBean("flywayDataSource")); + }); + } + @Test public void schemaManagementProviderDetectsDataSource() { 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 bb31bcb138..70855e4dbc 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 @@ -248,6 +248,17 @@ public class LiquibaseAutoConfigurationTests { }); } + @Test + public void liquibaseDataSourceWithoutDataSourceAutoConfiguration() { + this.contextRunner + .withUserConfiguration(LiquibaseDataSourceConfiguration.class) + .run((context) -> { + SpringLiquibase liquibase = context.getBean(SpringLiquibase.class); + assertThat(liquibase.getDataSource()) + .isEqualTo(context.getBean("liquibaseDataSource")); + }); + } + private ContextConsumer assertLiquibase( Consumer consumer) { return (context) -> { diff --git a/spring-boot-project/spring-boot-devtools/src/test/java/org/springframework/boot/devtools/autoconfigure/AbstractDevToolsDataSourceAutoConfigurationTests.java b/spring-boot-project/spring-boot-devtools/src/test/java/org/springframework/boot/devtools/autoconfigure/AbstractDevToolsDataSourceAutoConfigurationTests.java index 807221ad53..6613374146 100644 --- a/spring-boot-project/spring-boot-devtools/src/test/java/org/springframework/boot/devtools/autoconfigure/AbstractDevToolsDataSourceAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-devtools/src/test/java/org/springframework/boot/devtools/autoconfigure/AbstractDevToolsDataSourceAutoConfigurationTests.java @@ -28,8 +28,6 @@ import org.junit.Test; import org.springframework.beans.BeansException; import org.springframework.beans.factory.annotation.AnnotatedGenericBeanDefinition; import org.springframework.beans.factory.config.BeanPostProcessor; -import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; -import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.util.TestPropertyValues; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; @@ -53,7 +51,6 @@ public abstract class AbstractDevToolsDataSourceAutoConfigurationTests { @Test public void singleManuallyConfiguredDataSourceIsNotClosed() throws SQLException { ConfigurableApplicationContext context = createContext( - DataSourcePropertiesConfiguration.class, SingleDataSourceConfiguration.class); DataSource dataSource = context.getBean(DataSource.class); Statement statement = configureDataSourceBehavior(dataSource); @@ -63,7 +60,6 @@ public abstract class AbstractDevToolsDataSourceAutoConfigurationTests { @Test public void multipleDataSourcesAreIgnored() throws SQLException { ConfigurableApplicationContext context = createContext( - DataSourcePropertiesConfiguration.class, MultipleDataSourcesConfiguration.class); Collection dataSources = context.getBeansOfType(DataSource.class) .values(); @@ -80,7 +76,6 @@ public abstract class AbstractDevToolsDataSourceAutoConfigurationTests { AnnotatedGenericBeanDefinition beanDefinition = new AnnotatedGenericBeanDefinition( dataSource.getClass()); context.registerBeanDefinition("dataSource", beanDefinition); - context.register(DataSourcePropertiesConfiguration.class); context.register(DevToolsDataSourceAutoConfiguration.class); context.refresh(); context.close(); @@ -146,12 +141,6 @@ public abstract class AbstractDevToolsDataSourceAutoConfigurationTests { } - @Configuration - @EnableConfigurationProperties(DataSourceProperties.class) - static class DataSourcePropertiesConfiguration { - - } - @Configuration static class DataSourceSpyConfiguration {