1、引入依赖
<!--定时任务--> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.0</version> </dependency> |
2、编写任务job
/** * XX系统定时同步活动商品 * * @author :ZHANGPENGFEI * @create 2019-01-07 14:08 **/ @Slf4j @DisallowConcurrentExecution public class PromotionJob implements Job,Serializable { @Autowired SynPromotionToProduct synPromotionToProduct; @Override public void execute(JobExecutionContext context) throws JobExecutionException { log.info("【同步任务开始。。。】"); String synResult = synPromotionToProduct.synActivityProductToProduct(); log.info("【同步任务结束。。。】-》"+synResult); } } |
3、编写处理Job中注入业务service的配置类
/** * 解决spring bean注入Job的问题 */ @Component public class SpringJobFactory extends AdaptableJobFactory { @Autowired private AutowireCapableBeanFactory capableBeanFactory; @Override protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception { // 调用父类的方法 Object jobInstance = super.createJobInstance(bundle); // 进行注入 capableBeanFactory.autowireBean(jobInstance); return jobInstance; } } |
4、编写job调度器
@Configuration @EnableScheduling public class QuartzSchedule { @Autowired private SpringJobFactory myJobFactory; @Bean public SchedulerFactoryBean schedulerFactoryBean(Trigger updateTrigger) throws IOException { SchedulerFactoryBean factory = new SchedulerFactoryBean(); //设置是否任意一个已定义的Job会覆盖现在的Job。默认为false,即已定义的Job不会覆盖现有的Job。 factory.setOverwriteExistingJobs(true); // 延时启动 ,应用启动3秒后 ,定时器才开始启动 //factory.setStartupDelay(3); // 自定义Job Factory,用于Spring注入 factory.setJobFactory(myJobFactory); //注册定时触发器 factory.setTriggers(updateTrigger); return factory; } @Bean(name = "updateJobDetail") public JobDetailFactoryBean uploadJobDetail() { JobDetailFactoryBean jobDetail = new JobDetailFactoryBean(); jobDetail.setJobClass(PromotionJob.class); return jobDetail; } @Bean(name = "updateTrigger") public CronTriggerFactoryBean updateTriggerFactoryBean(JobDetail updateJobDetail) { CronTriggerFactoryBean trigger = new CronTriggerFactoryBean(); trigger.setCronExpression("0 0/30 * * * ? *"); trigger.setJobDetail(updateJobDetail); return trigger; } } |