Skip to content

Commit eaad22d

Browse files
ahrytsiukmbhave
authored andcommitted
Set up SpringLiquibase beans' dependencies by type rather than name
See gh-17805
1 parent 24f6c9e commit eaad22d

File tree

5 files changed

+66
-3
lines changed

5 files changed

+66
-3
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/jpa/EntityManagerFactoryDependsOnPostProcessor.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,13 @@ public EntityManagerFactoryDependsOnPostProcessor(String... dependsOn) {
4040
super(EntityManagerFactory.class, AbstractEntityManagerFactoryBean.class, dependsOn);
4141
}
4242

43+
/**
44+
* Creates a new {@code EntityManagerFactoryDependsOnPostProcessor} that will set up
45+
* dependencies upon beans with the given types.
46+
* @param dependsOn types of the beans to depend upon
47+
*/
48+
public EntityManagerFactoryDependsOnPostProcessor(Class<?>... dependsOn) {
49+
super(EntityManagerFactory.class, AbstractEntityManagerFactoryBean.class, dependsOn);
50+
}
51+
4352
}

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/JdbcOperationsDependsOnPostProcessor.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,13 @@ public JdbcOperationsDependsOnPostProcessor(String... dependsOn) {
3838
super(JdbcOperations.class, dependsOn);
3939
}
4040

41+
/**
42+
* Creates a new {@code JdbcOperationsDependsOnPostProcessor} that will set up
43+
* dependencies upon beans with the given types.
44+
* @param dependsOn types of the beans to depend upon
45+
*/
46+
public JdbcOperationsDependsOnPostProcessor(Class<?>... dependsOn) {
47+
super(JdbcOperations.class, dependsOn);
48+
}
49+
4150
}

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/NamedParameterJdbcOperationsDependsOnPostProcessor.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,13 @@ public NamedParameterJdbcOperationsDependsOnPostProcessor(String... dependsOn) {
3636
super(NamedParameterJdbcOperations.class, dependsOn);
3737
}
3838

39+
/**
40+
* Creates a new {@code NamedParameterJdbcOperationsDependsOnPostProcessor} that will
41+
* set up dependencies upon beans with the given types.
42+
* @param dependsOn types of the beans to depend upon
43+
*/
44+
public NamedParameterJdbcOperationsDependsOnPostProcessor(Class<?>... dependsOn) {
45+
super(NamedParameterJdbcOperations.class, dependsOn);
46+
}
47+
3948
}

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ private String getProperty(Supplier<String> property, Supplier<String> defaultVa
165165
protected static class LiquibaseJpaDependencyConfiguration extends EntityManagerFactoryDependsOnPostProcessor {
166166

167167
public LiquibaseJpaDependencyConfiguration() {
168-
super("liquibase");
168+
super(SpringLiquibase.class);
169169
}
170170

171171
}
@@ -180,7 +180,7 @@ public LiquibaseJpaDependencyConfiguration() {
180180
protected static class LiquibaseJdbcOperationsDependencyConfiguration extends JdbcOperationsDependsOnPostProcessor {
181181

182182
public LiquibaseJdbcOperationsDependencyConfiguration() {
183-
super("liquibase");
183+
super(SpringLiquibase.class);
184184
}
185185

186186
}
@@ -196,7 +196,7 @@ protected static class LiquibaseNamedParameterJdbcOperationsDependencyConfigurat
196196
extends NamedParameterJdbcOperationsDependsOnPostProcessor {
197197

198198
public LiquibaseNamedParameterJdbcOperationsDependencyConfiguration() {
199-
super("liquibase");
199+
super(SpringLiquibase.class);
200200
}
201201

202202
}

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfigurationTests.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,11 @@
3232
import org.junit.rules.TemporaryFolder;
3333

3434
import org.springframework.beans.factory.BeanCreationException;
35+
import org.springframework.beans.factory.config.BeanDefinition;
3536
import org.springframework.boot.SpringApplication;
3637
import org.springframework.boot.autoconfigure.AutoConfigurations;
3738
import org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfiguration;
39+
import org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration;
3840
import org.springframework.boot.context.event.ApplicationStartingEvent;
3941
import org.springframework.boot.jdbc.DataSourceBuilder;
4042
import org.springframework.boot.liquibase.LiquibaseServiceLocatorApplicationListener;
@@ -300,6 +302,26 @@ public void liquibaseDataSourceWithoutDataSourceAutoConfiguration() {
300302
});
301303
}
302304

305+
@Test
306+
void userConfigurationBeans() {
307+
this.contextRunner
308+
.withUserConfiguration(LiquibaseUserConfiguration.class, EmbeddedDataSourceConfiguration.class)
309+
.run((context) -> {
310+
assertThat(context).hasBean("springLiquibase");
311+
assertThat(context).doesNotHaveBean("liquibase");
312+
});
313+
}
314+
315+
@Test
316+
void userConfigurationJdbcTemplateDependency() {
317+
this.contextRunner.withConfiguration(AutoConfigurations.of(JdbcTemplateAutoConfiguration.class))
318+
.withUserConfiguration(LiquibaseUserConfiguration.class, EmbeddedDataSourceConfiguration.class)
319+
.run((context) -> {
320+
BeanDefinition beanDefinition = context.getBeanFactory().getBeanDefinition("jdbcTemplate");
321+
assertThat(beanDefinition.getDependsOn()).containsExactly("springLiquibase");
322+
});
323+
}
324+
303325
private ContextConsumer<AssertableApplicationContext> assertLiquibase(Consumer<SpringLiquibase> consumer) {
304326
return (context) -> {
305327
assertThat(context).hasSingleBean(SpringLiquibase.class);
@@ -325,4 +347,18 @@ public DataSource liquibaseDataSource() {
325347

326348
}
327349

350+
@Configuration
351+
static class LiquibaseUserConfiguration {
352+
353+
@Bean
354+
SpringLiquibase springLiquibase(DataSource dataSource) {
355+
SpringLiquibase liquibase = new SpringLiquibase();
356+
liquibase.setChangeLog("classpath:/db/changelog/db.changelog-master.yaml");
357+
liquibase.setShouldRun(true);
358+
liquibase.setDataSource(dataSource);
359+
return liquibase;
360+
}
361+
362+
}
363+
328364
}

0 commit comments

Comments
 (0)