Skip to content

Commit 75a1a24

Browse files
committed
Polish "Ensure Flyway/Liquibase runs before Quartz"
See gh-17539
1 parent 7e5bd1f commit 75a1a24

File tree

1 file changed

+22
-50
lines changed

1 file changed

+22
-50
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/quartz/QuartzAutoConfiguration.java

Lines changed: 22 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,12 @@
2222
import javax.sql.DataSource;
2323

2424
import liquibase.integration.spring.SpringLiquibase;
25-
import org.flywaydb.core.Flyway;
2625
import org.quartz.Calendar;
2726
import org.quartz.JobDetail;
2827
import org.quartz.Scheduler;
2928
import org.quartz.Trigger;
3029

3130
import org.springframework.beans.factory.ObjectProvider;
32-
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
3331
import org.springframework.boot.autoconfigure.AbstractDependsOnBeanFactoryPostProcessor;
3432
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
3533
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
@@ -163,6 +161,7 @@ public QuartzDataSourceInitializer quartzDataSourceInitializer(DataSource dataSo
163161
QuartzProperties properties) {
164162
DataSource dataSourceToUse = getDataSource(dataSource, quartzDataSource);
165163
return new QuartzDataSourceInitializer(dataSourceToUse, resourceLoader, properties);
164+
166165
}
167166

168167
/**
@@ -171,64 +170,37 @@ public QuartzDataSourceInitializer quartzDataSourceInitializer(DataSource dataSo
171170
* bean(s).
172171
*/
173172
@Configuration
174-
protected static class SchedulerQuartzDataSourceInitializerDependencyConfiguration
175-
extends AbstractSchedulerDependsOnBeanFactoryPostProcessor {
173+
static class QuartzSchedulerDependencyConfiguration {
176174

177-
SchedulerQuartzDataSourceInitializerDependencyConfiguration() {
178-
super(QuartzDataSourceInitializer.class);
175+
@Bean
176+
public static SchedulerDependsOnBeanFactoryPostProcessor quartzSchedulerDataSourceInitializerDependsOnBeanFactoryPostProcessor() {
177+
return new SchedulerDependsOnBeanFactoryPostProcessor(QuartzDataSourceInitializer.class);
179178
}
180179

181-
}
182-
183-
/**
184-
* Additional configuration to ensure that {@link SchedulerFactoryBean} and
185-
* {@link Scheduler} beans depend on the {@link SpringLiquibase} bean(s).
186-
*/
187-
@Configuration
188-
@ConditionalOnClass(SpringLiquibase.class)
189-
@ConditionalOnBean(SpringLiquibase.class)
190-
protected static class SchedulerSpringLiquibaseDependencyConfiguration
191-
extends AbstractSchedulerDependsOnBeanFactoryPostProcessor {
192-
193-
SchedulerSpringLiquibaseDependencyConfiguration() {
194-
super(SpringLiquibase.class);
180+
@Bean
181+
@ConditionalOnBean(FlywayMigrationInitializer.class)
182+
public static SchedulerDependsOnBeanFactoryPostProcessor quartzSchedulerFilywayDependsOnBeanFactoryPostProcessor() {
183+
return new SchedulerDependsOnBeanFactoryPostProcessor(FlywayMigrationInitializer.class);
195184
}
196185

197-
}
198-
199-
/**
200-
* Additional configuration to ensure that {@link SchedulerFactoryBean} and
201-
* {@link Scheduler} beans depend on the {@link FlywayMigrationInitializer}
202-
* bean(s).
203-
*/
204-
@Configuration
205-
@ConditionalOnClass(Flyway.class)
206-
@ConditionalOnBean(FlywayMigrationInitializer.class)
207-
protected static class SchedulerFlywayMigrationInitializerDependencyConfiguration
208-
extends AbstractSchedulerDependsOnBeanFactoryPostProcessor {
209-
210-
SchedulerFlywayMigrationInitializerDependencyConfiguration() {
211-
super(FlywayMigrationInitializer.class);
186+
@Bean
187+
@ConditionalOnBean(SpringLiquibase.class)
188+
public static SchedulerDependsOnBeanFactoryPostProcessor quartzSchedulerLiquibaseDependsOnBeanFactoryPostProcessor() {
189+
return new SchedulerDependsOnBeanFactoryPostProcessor(SpringLiquibase.class);
212190
}
213191

214192
}
215193

216-
/**
217-
* {@link BeanFactoryPostProcessor} that can be used to declare that all
218-
* {@link Scheduler} and {@link SchedulerFactoryBean} beans should "depend on" one
219-
* or more specific beans.
220-
*/
221-
protected abstract static class AbstractSchedulerDependsOnBeanFactoryPostProcessor
222-
extends AbstractDependsOnBeanFactoryPostProcessor {
223-
224-
/**
225-
* Create an instance with dependency types.
226-
* @param dependencyTypes dependency types
227-
*/
228-
protected AbstractSchedulerDependsOnBeanFactoryPostProcessor(Class<?>... dependencyTypes) {
229-
super(Scheduler.class, SchedulerFactoryBean.class, dependencyTypes);
230-
}
194+
}
195+
196+
/**
197+
* {@link AbstractDependsOnBeanFactoryPostProcessor} for Quartz {@link Scheduler} and
198+
* {@link SchedulerFactoryBean}.
199+
*/
200+
private static class SchedulerDependsOnBeanFactoryPostProcessor extends AbstractDependsOnBeanFactoryPostProcessor {
231201

202+
SchedulerDependsOnBeanFactoryPostProcessor(Class<?>... dependencyTypes) {
203+
super(Scheduler.class, SchedulerFactoryBean.class, dependencyTypes);
232204
}
233205

234206
}

0 commit comments

Comments
 (0)