首先我们将Scheduler交给spring生成, 在SchedulerFactoryBean有个jobFactory属性, 而且jobFactory是实现SchedulerContextAware的类还要继承AdaptableJobFactory。
@Component
public class JobFactory extends AdaptableJobFactory {
@Autowired
private AutowireCapableBeanFactory capableBeanFactory;
@Override
protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
//调用父类的方法
Object jobInstance = super.createJobInstance(bundle);
//进行注入
capableBeanFactory.autowireBean(jobInstance);
return jobInstance;
}
}
生成schedulerFactoryBean,把schedule交给Spring管理,初始化schedulerFactoryBean
@Configuration
public class QuartzConfig {
@Autowired
private JobFactory jobFactory;
@Bean()
public SchedulerFactoryBean schedulerFactoryBean() {
SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
schedulerFactoryBean.setJobFactory(jobFactory);
schedulerFactoryBean.setStartupDelay(20);
//用于quartz集群,加载quartz数据源配置
// factory.setQuartzProperties(quartzProperties());
//注册触发器
return schedulerFactoryBean;
}
@Bean
public Scheduler scheduler() {
return schedulerFactoryBean().getScheduler();
}
}
以上配置将Spring来管理调度。实现jobFactory,然后初始化SchedulerFactoryBean ,再将scheduler统一管理