Commit eaad22dd authored by Andrii Hrytsiuk's avatar Andrii Hrytsiuk Committed by Madhura Bhave

Set up SpringLiquibase beans' dependencies by type rather than name

See gh-17805
parent 24f6c9e4
......@@ -40,4 +40,13 @@ public class EntityManagerFactoryDependsOnPostProcessor extends AbstractDependsO
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
*/
public EntityManagerFactoryDependsOnPostProcessor(Class<?>... dependsOn) {
super(EntityManagerFactory.class, AbstractEntityManagerFactoryBean.class, dependsOn);
}
}
......@@ -38,4 +38,13 @@ public class JdbcOperationsDependsOnPostProcessor extends AbstractDependsOnBeanF
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
*/
public JdbcOperationsDependsOnPostProcessor(Class<?>... dependsOn) {
super(JdbcOperations.class, dependsOn);
}
}
......@@ -36,4 +36,13 @@ public class NamedParameterJdbcOperationsDependsOnPostProcessor extends Abstract
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
*/
public NamedParameterJdbcOperationsDependsOnPostProcessor(Class<?>... dependsOn) {
super(NamedParameterJdbcOperations.class, dependsOn);
}
}
......@@ -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);
}
}
......
......@@ -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;
......@@ -300,6 +302,26 @@ public class LiquibaseAutoConfigurationTests {
});
}
@Test
void userConfigurationBeans() {
this.contextRunner
.withUserConfiguration(LiquibaseUserConfiguration.class, EmbeddedDataSourceConfiguration.class)
.run((context) -> {
assertThat(context).hasBean("springLiquibase");
assertThat(context).doesNotHaveBean("liquibase");
});
}
@Test
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<AssertableApplicationContext> assertLiquibase(Consumer<SpringLiquibase> consumer) {
return (context) -> {
assertThat(context).hasSingleBean(SpringLiquibase.class);
......@@ -325,4 +347,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;
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment