package com.sandu.common.quartz.config;
|
|
import com.sandu.common.quartz.service.QuartzService;
|
import org.quartz.Scheduler;
|
import org.quartz.spi.TriggerFiredBundle;
|
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Configuration;
|
import org.springframework.scheduling.quartz.AdaptableJobFactory;
|
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
|
import org.springframework.stereotype.Component;
|
|
/**
|
* @author chenjiantian
|
* @date 2021/12/15 10:48
|
*/
|
@Configuration
|
@ConditionalOnClass(QuartzService.class)
|
public class QuartzConfig {
|
|
/**
|
* 解决Job中注入Spring Bean为null的问题
|
*/
|
@Component("quartzJobFactory")
|
public static class QuartzJobFactory extends AdaptableJobFactory {
|
|
private final AutowireCapableBeanFactory capableBeanFactory;
|
|
public QuartzJobFactory(AutowireCapableBeanFactory capableBeanFactory) {
|
this.capableBeanFactory = capableBeanFactory;
|
}
|
|
@Override
|
protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
|
|
//调用父类的方法
|
Object jobInstance = super.createJobInstance(bundle);
|
capableBeanFactory.autowireBean(jobInstance);
|
return jobInstance;
|
}
|
}
|
|
/**
|
* 注入scheduler到spring
|
* @param quartzJobFactory /
|
* @return Scheduler
|
* @throws Exception /
|
*/
|
@Bean(name = "scheduler")
|
public Scheduler scheduler(QuartzJobFactory quartzJobFactory) throws Exception {
|
SchedulerFactoryBean factoryBean = new SchedulerFactoryBean();
|
factoryBean.setJobFactory(quartzJobFactory);
|
factoryBean.afterPropertiesSet();
|
Scheduler scheduler = factoryBean.getScheduler();
|
scheduler.start();
|
return scheduler;
|
}
|
}
|