spring boot整合quartz实现多个定时任务的方法
最近收到了很多封邮件,都是想知道springboot整合quartz如何实现多个定时任务的,由于本人生产上并没有使用到多个定时任务,这里给个实现的思路。
1、新建两个定时任务,如下:
publicclassScheduledJobimplementsJob{
@Override
publicvoidexecute(JobExecutionContextcontext)throwsJobExecutionException{
System.out.println("schedulejob1isrunning……………………………………");
}
}
publicclassScheduledJob2implementsJob{
@Override
publicvoidexecute(JobExecutionContextcontext)throwsJobExecutionException{
System.out.println("schedulejob2isrunning……………………………………………………");
}
}
2、配置以上两个任务
@Component
publicclassSchedulerAllJob{
@Autowired
privateSchedulerFactoryBeanschedulerFactoryBean;
/*
*此处可以注入数据库操作,查询出所有的任务配置
*/
/**
*该方法用来启动所有的定时任务
*@throwsSchedulerException
*/
publicvoidscheduleJobs()throwsSchedulerException{
Schedulerscheduler=schedulerFactoryBean.getScheduler();
/**
*
*/
scheduleJob1(scheduler);
scheduleJob2(scheduler);
}
/**
*配置Job1
*此处的任务可以配置可以放到properties或者是放到数据库中
*如果此时需要做到动态的定时任务,请参考:http://blog.csdn.net/liuchuanhong1/article/details/60873295
*博客中的ScheduleRefreshDatabase类
*@paramscheduler
*@throwsSchedulerException
*/
privatevoidscheduleJob1(Schedulerscheduler)throwsSchedulerException{
/*
*此处可以先通过任务名查询数据库,如果数据库中存在该任务,则按照ScheduleRefreshDatabase类中的方法,更新任务的配置以及触发器
*如果此时数据库中没有查询到该任务,则按照下面的步骤新建一个任务,并配置初始化的参数,并将配置存到数据库中
*/
JobDetailjobDetail=JobBuilder.newJob(ScheduledJob.class).withIdentity("job1","group1").build();
//每5s执行一次
CronScheduleBuilderscheduleBuilder=CronScheduleBuilder.cronSchedule("0/5****?");
CronTriggercronTrigger=TriggerBuilder.newTrigger().withIdentity("trigger1","group1").withSchedule(scheduleBuilder).build();
scheduler.scheduleJob(jobDetail,cronTrigger);
}
/**
*配置Job
*@paramscheduler
*@throwsSchedulerException
*/
privatevoidscheduleJob2(Schedulerscheduler)throwsSchedulerException{
JobDetailjobDetail=JobBuilder.newJob(ScheduledJob2.class).withIdentity("job2","group1").build();
CronScheduleBuilderscheduleBuilder=CronScheduleBuilder.cronSchedule("0/10****?");
//每10s执行一次
CronTriggercronTrigger=TriggerBuilder.newTrigger().withIdentity("trigger2","group1").withSchedule(scheduleBuilder).build();
scheduler.scheduleJob(jobDetail,cronTrigger);
}
}
3、启动两个任务
@Configuration
@EnableScheduling
@Component
publicclassSchedulerListener{
@Autowired
publicSchedulerAllJobmyScheduler;
/**
*启动的时候执行该方法,或者是使用ApplicationListener,在启动的时候执行该方法
*具体使用见:http://blog.csdn.net/liuchuanhong1/article/details/77568187
*@throwsSchedulerException
*/
@Scheduled(cron="00818?**")
publicvoidschedule()throwsSchedulerException{
myScheduler.scheduleJobs();
}
@Bean
publicSchedulerFactoryBeanschedulerFactoryBean(){
SchedulerFactoryBeanschedulerFactoryBean=newSchedulerFactoryBean();
returnschedulerFactoryBean;
}
}
4、测试结果如下
schedulejob1isrunning…………………………………… schedulejob2isrunning…………………………………………………… schedulejob1isrunning…………………………………… schedulejob1isrunning…………………………………… schedulejob2isrunning…………………………………………………… schedulejob1isrunning…………………………………… schedulejob1isrunning…………………………………… schedulejob2isrunning…………………………………………………… schedulejob1isrunning……………………………………
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。