Skip to content

Commit

Permalink
Polish "Ensure that Flyway/Liquibase run before jOOQ's DSLContext is …
Browse files Browse the repository at this point in the history
…used"

See gh-25279
  • Loading branch information
wilkinsona committed Feb 16, 2021
1 parent c55200d commit 78941c3
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 43 deletions.
Expand Up @@ -167,8 +167,8 @@ private String getProperty(Supplier<String> property, Supplier<String> defaultVa
}

/**
* Post processor to ensure that {@link EntityManagerFactory} beans depend on the
* liquibase bean.
* Post processor to ensure that {@link EntityManagerFactory} beans depend on any
* {@link SpringLiquibase} beans.
*/
@ConditionalOnClass(LocalContainerEntityManagerFactoryBean.class)
@ConditionalOnBean(AbstractEntityManagerFactoryBean.class)
Expand All @@ -182,8 +182,8 @@ static class LiquibaseEntityManagerFactoryDependsOnPostProcessor
}

/**
* Additional configuration to ensure that {@link JdbcOperations} beans depend on the
* liquibase bean.
* Additional configuration to ensure that {@link JdbcOperations} beans depend on any
* {@link SpringLiquibase} beans.
*/
@ConditionalOnClass(JdbcOperations.class)
@ConditionalOnBean(JdbcOperations.class)
Expand All @@ -197,7 +197,7 @@ static class LiquibaseJdbcOperationsDependsOnPostProcessor extends JdbcOperation

/**
* Post processor to ensure that {@link NamedParameterJdbcOperations} beans depend on
* the liquibase bean.
* any {@link SpringLiquibase} beans.
*/
@ConditionalOnClass(NamedParameterJdbcOperations.class)
@ConditionalOnBean(NamedParameterJdbcOperations.class)
Expand All @@ -211,8 +211,8 @@ static class LiquibaseNamedParameterJdbcOperationsDependsOnPostProcessor
}

/**
* Post processor to ensure that {@link DSLContext} beans depend on the liquibase
* bean.
* Post processor to ensure that {@link DSLContext} beans depend on any
* {@link SpringLiquibase} beans.
*/
@ConditionalOnClass(DSLContext.class)
@ConditionalOnBean(DSLContext.class)
Expand Down
Expand Up @@ -525,24 +525,32 @@ void initSqlsWithFlywayUrl() {
}

@Test
void userConfigurationDslContextDependency() {
this.contextRunner
.withUserConfiguration(EmbeddedDataSourceConfiguration.class, CustomFlywayWithJooqConfiguration.class)
void whenFlywayIsAutoConfiguredThenJooqDslContextDependsOnFlywayBeans() {
this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class, JooqConfiguration.class)
.run((context) -> {
BeanDefinition beanDefinition = context.getBeanFactory().getBeanDefinition("dslContext");
assertThat(beanDefinition.getDependsOn()).containsExactly("flyway");
assertThat(beanDefinition.getDependsOn()).containsExactly("flywayInitializer", "flyway");
});
}

@Test
void userConfigurationWithFlywayMigrationAndDslContextDependency() {
this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class,
CustomFlywayMigrationInitializerWithJooqConfiguration.class).run((context) -> {
void whenCustomMigrationInitializerIsDefinedThenJooqDslContextDependsOnIt() {
this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class, JooqConfiguration.class,
CustomFlywayMigrationInitializer.class).run((context) -> {
BeanDefinition beanDefinition = context.getBeanFactory().getBeanDefinition("dslContext");
assertThat(beanDefinition.getDependsOn()).containsExactly("flywayMigrationInitializer", "flyway");
});
}

@Test
void whenCustomFlywayIsDefinedThenJooqDslContextDependsOnIt() {
this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class, JooqConfiguration.class,
CustomFlyway.class).run((context) -> {
BeanDefinition beanDefinition = context.getBeanFactory().getBeanDefinition("dslContext");
assertThat(beanDefinition.getDependsOn()).containsExactly("customFlyway");
});
}

@Configuration(proxyBeanMethods = false)
static class FlywayDataSourceConfiguration {

Expand Down Expand Up @@ -619,6 +627,16 @@ FlywayMigrationInitializer flywayMigrationInitializer(Flyway flyway) {

}

@Configuration(proxyBeanMethods = false)
static class CustomFlyway {

@Bean
Flyway customFlyway() {
return Flyway.configure().load();
}

}

@Configuration(proxyBeanMethods = false)
static class CustomFlywayMigrationInitializerWithJpaConfiguration {

Expand Down Expand Up @@ -771,34 +789,8 @@ FlywayConfigurationCustomizer customizerTwo() {

}

@Configuration
static class CustomFlywayWithJooqConfiguration {

@Bean
Flyway flyway(DataSource dataSource) {
return Flyway.configure().dataSource(dataSource).load();
}

@Bean
DSLContext dslContext() {
return new DefaultDSLContext(SQLDialect.H2);
}

}

@Configuration
protected static class CustomFlywayMigrationInitializerWithJooqConfiguration {

private final DataSource dataSource;

protected CustomFlywayMigrationInitializerWithJooqConfiguration(DataSource dataSource) {
this.dataSource = dataSource;
}

@Bean
public FlywayMigrationInitializer flywayMigrationInitializer(Flyway flyway) {
return new FlywayMigrationInitializer(flyway);
}
@Configuration(proxyBeanMethods = false)
static class JooqConfiguration {

@Bean
DSLContext dslContext() {
Expand Down
Expand Up @@ -376,7 +376,16 @@ void overrideTag() {
}

@Test
void userConfigurationDslContextDependency() {
void whenLiquibaseIsAutoConfiguredThenJooqDslContextDependsOnSpringLiquibaseBeans() {
this.contextRunner.withConfiguration(AutoConfigurations.of(JooqAutoConfiguration.class))
.withUserConfiguration(EmbeddedDataSourceConfiguration.class).run((context) -> {
BeanDefinition beanDefinition = context.getBeanFactory().getBeanDefinition("dslContext");
assertThat(beanDefinition.getDependsOn()).containsExactly("liquibase");
});
}

@Test
void whenCustomSpringLiquibaseIsDefinedThenJooqDslContextDependsOnSpringLiquibaseBeans() {
this.contextRunner.withConfiguration(AutoConfigurations.of(JooqAutoConfiguration.class))
.withUserConfiguration(LiquibaseUserConfiguration.class, EmbeddedDataSourceConfiguration.class)
.run((context) -> {
Expand Down

0 comments on commit 78941c3

Please sign in to comment.