diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/jpa/EntityManagerFactoryDependsOnPostProcessor.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/jpa/EntityManagerFactoryDependsOnPostProcessor.java index baa90dc7de..19a8c159ee 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/jpa/EntityManagerFactoryDependsOnPostProcessor.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/jpa/EntityManagerFactoryDependsOnPostProcessor.java @@ -31,13 +31,29 @@ import org.springframework.orm.jpa.AbstractEntityManagerFactoryBean; * @author Dave Syer * @author Phillip Webb * @author Andy Wilkinson + * @author Andrii Hrytsiuk * @since 1.1.0 * @see BeanDefinition#setDependsOn(String[]) */ public class EntityManagerFactoryDependsOnPostProcessor extends AbstractDependsOnBeanFactoryPostProcessor { + /** + * Creates a new {@code EntityManagerFactoryDependsOnPostProcessor} that will set up + * dependencies upon beans with the given names. + * @param dependsOn names of the beans to depend upon + */ public EntityManagerFactoryDependsOnPostProcessor(String... dependsOn) { super(EntityManagerFactory.class, AbstractEntityManagerFactoryBean.class, dependsOn); } + /** + * Creates a new {@code EntityManagerFactoryDependsOnPostProcessor} that will set up + * dependencies upon beans with the given types. + * @param dependsOn types of the beans to depend upon + * @since 2.1.8 + */ + public EntityManagerFactoryDependsOnPostProcessor(Class... dependsOn) { + super(EntityManagerFactory.class, AbstractEntityManagerFactoryBean.class, dependsOn); + } + } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/JdbcOperationsDependsOnPostProcessor.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/JdbcOperationsDependsOnPostProcessor.java index c8062b32f1..ef375dec4d 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/JdbcOperationsDependsOnPostProcessor.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/JdbcOperationsDependsOnPostProcessor.java @@ -29,13 +29,29 @@ import org.springframework.jdbc.core.JdbcOperations; * @author Dave Syer * @author Phillip Webb * @author Andy Wilkinson + * @author Andrii Hrytsiuk * @since 2.0.4 * @see BeanDefinition#setDependsOn(String[]) */ public class JdbcOperationsDependsOnPostProcessor extends AbstractDependsOnBeanFactoryPostProcessor { + /** + * Creates a new {@code JdbcOperationsDependsOnPostProcessor} that will set up + * dependencies upon beans with the given names. + * @param dependsOn names of the beans to depend upon + */ public JdbcOperationsDependsOnPostProcessor(String... dependsOn) { super(JdbcOperations.class, dependsOn); } + /** + * Creates a new {@code JdbcOperationsDependsOnPostProcessor} that will set up + * dependencies upon beans with the given types. + * @param dependsOn types of the beans to depend upon + * @since 2.1.8 + */ + public JdbcOperationsDependsOnPostProcessor(Class... dependsOn) { + super(JdbcOperations.class, dependsOn); + } + } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/NamedParameterJdbcOperationsDependsOnPostProcessor.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/NamedParameterJdbcOperationsDependsOnPostProcessor.java index a8bbc2432f..d7174a61a2 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/NamedParameterJdbcOperationsDependsOnPostProcessor.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/NamedParameterJdbcOperationsDependsOnPostProcessor.java @@ -27,13 +27,29 @@ import org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations; * beans. * * @author Dan Zheng + * @author Andrii Hrytsiuk * @since 2.1.4 * @see BeanDefinition#setDependsOn(String[]) */ public class NamedParameterJdbcOperationsDependsOnPostProcessor extends AbstractDependsOnBeanFactoryPostProcessor { + /** + * Creates a new {@code NamedParameterJdbcOperationsDependsOnPostProcessor} that will + * set up dependencies upon beans with the given names. + * @param dependsOn names of the beans to depend upon + */ public NamedParameterJdbcOperationsDependsOnPostProcessor(String... dependsOn) { super(NamedParameterJdbcOperations.class, dependsOn); } + /** + * Creates a new {@code NamedParameterJdbcOperationsDependsOnPostProcessor} that will + * set up dependencies upon beans with the given types. + * @param dependsOn types of the beans to depend upon + * @since 2.1.8 + */ + public NamedParameterJdbcOperationsDependsOnPostProcessor(Class... dependsOn) { + super(NamedParameterJdbcOperations.class, dependsOn); + } + } 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 1d3df0dc08..d518b4b54d 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 @@ -165,7 +165,7 @@ public class LiquibaseAutoConfiguration { protected static class LiquibaseJpaDependencyConfiguration extends EntityManagerFactoryDependsOnPostProcessor { public LiquibaseJpaDependencyConfiguration() { - super("liquibase"); + super(SpringLiquibase.class); } } @@ -180,7 +180,7 @@ public class LiquibaseAutoConfiguration { protected static class LiquibaseJdbcOperationsDependencyConfiguration extends JdbcOperationsDependsOnPostProcessor { public LiquibaseJdbcOperationsDependencyConfiguration() { - super("liquibase"); + super(SpringLiquibase.class); } } @@ -196,7 +196,7 @@ public class LiquibaseAutoConfiguration { extends NamedParameterJdbcOperationsDependsOnPostProcessor { public LiquibaseNamedParameterJdbcOperationsDependencyConfiguration() { - super("liquibase"); + super(SpringLiquibase.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 a99b8dc6b1..d3c819c39f 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 @@ -32,9 +32,11 @@ import org.junit.Test; import org.junit.rules.TemporaryFolder; import org.springframework.beans.factory.BeanCreationException; +import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfiguration; +import org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration; import org.springframework.boot.context.event.ApplicationStartingEvent; import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.boot.liquibase.LiquibaseServiceLocatorApplicationListener; @@ -61,6 +63,7 @@ import static org.assertj.core.api.Assertions.assertThat; * @author Stephane Nicoll * @author Dominic Gunn * @author András Deák + * @author Andrii Hrytsiuk */ public class LiquibaseAutoConfigurationTests { @@ -300,6 +303,26 @@ public class LiquibaseAutoConfigurationTests { }); } + @Test + public void userConfigurationBeans() { + this.contextRunner + .withUserConfiguration(LiquibaseUserConfiguration.class, EmbeddedDataSourceConfiguration.class) + .run((context) -> { + assertThat(context).hasBean("springLiquibase"); + assertThat(context).doesNotHaveBean("liquibase"); + }); + } + + @Test + public void userConfigurationJdbcTemplateDependency() { + this.contextRunner.withConfiguration(AutoConfigurations.of(JdbcTemplateAutoConfiguration.class)) + .withUserConfiguration(LiquibaseUserConfiguration.class, EmbeddedDataSourceConfiguration.class) + .run((context) -> { + BeanDefinition beanDefinition = context.getBeanFactory().getBeanDefinition("jdbcTemplate"); + assertThat(beanDefinition.getDependsOn()).containsExactly("springLiquibase"); + }); + } + private ContextConsumer assertLiquibase(Consumer consumer) { return (context) -> { assertThat(context).hasSingleBean(SpringLiquibase.class); @@ -325,4 +348,18 @@ public class LiquibaseAutoConfigurationTests { } + @Configuration + static class LiquibaseUserConfiguration { + + @Bean + SpringLiquibase springLiquibase(DataSource dataSource) { + SpringLiquibase liquibase = new SpringLiquibase(); + liquibase.setChangeLog("classpath:/db/changelog/db.changelog-master.yaml"); + liquibase.setShouldRun(true); + liquibase.setDataSource(dataSource); + return liquibase; + } + + } + }