动态改变Quartz的调度时间(2)

来源:互联网 发布:儿童编程在线教育 编辑:程序博客网 时间:2024/05/29 19:46

在动态改变Quartz的调度时间(1)中,使用删除Job然后重新加载实现动态改变调度周期,今天,我自己仔细看了下Quartz的API,发现用另一个方法可以实现这个功能。


版本:

1.8.6


相关链接:

API:http://quartz-scheduler.org/api/1.8.0/ 

http://quartz-scheduler.org/documentation/quartz-1.x/cookbook/UpdateTrigger


相关方法:

rescheduleJob

Date rescheduleJob(String triggerName,                   String groupName,                   Trigger newTrigger)                   throws SchedulerException

Remove (delete) the Trigger with the given name, and store the new given one - which must be associated with the same job (the new trigger must have the job name & group specified) - however, the new trigger need not have the same name as the old trigger.

(删除给定名称的触发器,并且保存新的触发器,新旧触发器的名字相不相同无所谓的。)

Parameters:
triggerName - The name of the Trigger to be replaced.(要替换的触发器的名字)
groupName - The group name of the Trigger to be replaced.(要替换的触发器所在组的名称)
newTrigger - The new Trigger to be stored.(新触发器)
Returns:
null if a Trigger with the given name & group was not found and removed from the store, otherwise the first fire time of the newly scheduled trigger.
Throws:
SchedulerException


具体代码:

/** * 动态修改任务的执行周期 * @param jobName 任务名称 * @param time 执行周期 * @throws SchedulerException * @throws ParseException */public static boolean modifyJobTime(String jobName, String time) throws SchedulerException, ParseException{boolean flag = false;Scheduler sched = sf.getScheduler();JobDetail jobDetail = sched.getJobDetail(jobName, JOB_GROUP_NAME);if(jobDetail != null){Trigger trigger = (CronTrigger)sched.getTrigger(jobDetail.getName(),JOB_TRIGGER_GROUP_NAME);if(trigger != null){CronTrigger ctrigger = (CronTrigger)trigger;String timeOld = ctrigger.getCronExpression();if(!timeOld.equalsIgnoreCase(time)){System.out.println("修改任务:"+jobName+"now:"+time);// 修改Triggerctrigger.setCronExpression(time);/** * 更新trigger * sched.rescheduleJob(triggerName, triggerGroupName, newTrigger) */sched.rescheduleJob(jobName, JOB_TRIGGER_GROUP_NAME, ctrigger);flag = true;}}}return flag;}
注:sched.rescheduleJob(jobName, JOB_TRIGGER_GROUP_NAME, ctrigger); 此处jobName就是triggerName,值都一样的。

0 0
原创粉丝点击