适用于我的代码:
数据库配置的一部分如下所示:
@Profile("!dbClean")
@Bean(initMethod = "migrate")
public Flyway flywayNotADestroyer() {
Flyway flyway = new Flyway();
flyway.setDataSource(dataSource());
flyway.setInitOnMigrate(true);
return flyway;
}
@Profile("dbClean")
@Bean(initMethod = "migrate")
public Flyway flywayTheDestroyer() {
Flyway flyway = new Flyway();
flyway.setDataSource(dataSource());
flyway.setInitOnMigrate(true);
flyway.clean();
return flyway;
}
Run Code Online (Sandbox Code Playgroud)
该配置代表两个互斥豆。存在“ dbClean”概要文件时创建一个,不存在该概要文件时创建另一个。忍受我,忘记代码重复。
另一个配置控制Quartz配置:
@Autowired
private Flyway flyway;
@Bean
public SchedulerFactoryBean quartzScheduler(Flyway flyway) throws SchedulerException {
SchedulerFactoryBean quartzScheduler = new SchedulerFactoryBean();
quartzScheduler.setDataSource(dataSource);
quartzScheduler.setTransactionManager(transactionManager);
quartzScheduler.setOverwriteExistingJobs(true);
quartzScheduler.setSchedulerName("mysuperduperthegratest-quartz-scheduler");
AutowiringSpringBeanJobFactory jobFactory = new AutowiringSpringBeanJobFactory();
jobFactory.setApplicationContext(applicationContext);
quartzScheduler.setJobFactory(jobFactory);
quartzScheduler.setQuartzProperties(schedulingProperties);
return quartzScheduler;
}
Run Code Online (Sandbox Code Playgroud)
上面的作品很有魅力。问题是Quartz配置未使用Flyway自动连接的bean。它只需要在Quartz调度程序之前创建此bean。
因此理想的配置是:
数据库部分:
@Profile("!dbClean")
@Bean(name = …Run Code Online (Sandbox Code Playgroud)