Quartz任务调度快速入门8
查询数据库中的运行信息
任务的现场保存对于上层的Quartz程序来说是完全透明的,我们在src目录下编写一个如代码清单6所示的quartz.properties文件后,重新运行代码清单2或代码清单3的程序,在数据库表中将可以看到对应的持久化信息。当调度程序运行过程中途停止后,任务调度的现场数据将记录在数据表中,在系统重启时就可以在此基础上继续进行任务的调度。
代码清单7JDBCJobStoreRunner:从数据库中恢复任务的调度
packagecom.baobaotao.basic.quartz;
importorg.quartz.Scheduler;
importorg.quartz.SchedulerFactory;
importorg.quartz.SimpleTrigger;
importorg.quartz.Trigger;
importorg.quartz.impl.StdSchedulerFactory;
publicclassJDBCJobStoreRunner{
publicstaticvoidmain(Stringargs[]){
try{
SchedulerFactoryschedulerFactory=newStdSchedulerFactory();
Schedulerscheduler=schedulerFactory.getScheduler();
①获取调度器中所有的触发器组
String[]triggerGroups=scheduler.getTriggerGroupNames();
②重新恢复在tgroup1组中,名为trigger1_1触发器的运行
for(inti=0;i<triggerGroups.length;i++){
String[]triggers=scheduler.getTriggerNames(triggerGroups[i]);
for(intj=0;j<triggers.length;j++){
Triggertg=scheduler.getTrigger(triggers[j],triggerGroups[i]);
if(tginstanceofSimpleTrigger
&&tg.getFullName().equals("tgroup1.trigger1_1")){②-1:根据名称判断
②-1:恢复运行
scheduler.rescheduleJob(triggers[j],triggerGroups[i],tg);
}
}
}
scheduler.start();
}catch(Exceptione){
e.printStackTrace();
}
}
}
当代码清单2中的SimpleTriggerRunner执行到一段时间后非正常退出,我们就可以通过这个JDBCJobStoreRunner根据记录在数据库中的现场数据恢复任务的调度。Scheduler中的所有Trigger以及JobDetail的运行信息都会保存在数据库中,这里我们仅恢复tgroup1组中名称为trigger1_1的触发器,这可以通过如②-1所示的代码进行过滤,触发器的采用GROUP.TRIGGER_NAME的全名格式。通过Scheduler#rescheduleJob(StringtriggerName,StringgroupName,TriggernewTrigger)即可重新调度关联某个Trigger的任务。