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的任务。

相关推荐