我在Spring Boot中使用Quartz,特别是通过SchedulerFactoryBean抽象使用它的便利性。参见https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-quartz.html。
我需要改为手动启动Scheduler,为此,我想到了在自动装配Scheduler实例的类中使用schedulerFactoryBean.setAutoStartup(false)然后使用Scheduler.start()。请参见下面的示例代码。
@Configuration
public class QuartzConfig implements SchedulerFactoryBeanCustomizer {
public static final int STARTUP_DELAY = 5;
@Autowired
private DataSource dataSource;
@Override
public void customize(SchedulerFactoryBean schedulerFactoryBean) {
schedulerFactoryBean.setDataSource(dataSource);
schedulerFactoryBean.setStartupDelay(STARTUP_DELAY);
schedulerFactoryBean.setAutoStartup(false);
schedulerFactoryBean.setWaitForJobsToCompleteOnShutdown(TRUE);
}
}
@Service
public class SchedulerService {
private final Scheduler scheduler;
@Autowired
public SchedulerService(Scheduler scheduler) {
this.scheduler = scheduler;
}
public void startScheduler() {
this.scheduler.start();
}
}
但是,数据库中其他节点上将运行其他实例。我的问题是,此未启动的Scheduler实例是否刷新或意识到另一个实例完成的所有工作?备用Quartz Scheduler是否需要某种手动触发的刷新才能启动?
例如,如果添加,更改或删除了触发器,作业或其他东西,在代码调用.start()之后,未启动的触发器是否会意识到(缓存刷新?)?
我已经读了几本石英书,对此我真的找不到答案。我找不到一个可以解释实例是否或如何通过对其数据库进行外部更改来自我体现的地方。