Set up SpringLiquibase beans' dependencies by type rather than name
See gh-17805
This commit is contained in:
committed by
Madhura Bhave
parent
24f6c9e47f
commit
eaad22dd89
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user