如何解决将多个触发器添加到单个石英作业
| 我想动态地将触发器添加到作业,但找不到Scheduler之外的任何有用方法 我虽然可以重复调用scheduleJob方法,但这给了我ObjectAlreadyExists异常\“,因为该标识已经存在\”。 我怎样才能做到这一点? 编辑private boolean scheduleLoadJob( XfuScheduleTimeInfo time )
{
LoadScheduleJob job = new LoadScheduleJob( time );
JobDetail detail;
Integer id = Integer.valueOf( time.getScheduleId() );
if( _hashMap.containsKey( id ) )
{
detail = _hashMap.get( Integer.valueOf( time.getScheduleId() ) );
}
else
{
detail = job.getDetail();
_hashMap.put( id,detail );
}
try
{
Trigger newTrigger = job.getTrigger();
_log.debug( \"------\" + newTrigger.getKey() );
_quartzScheduler.scheduleJob( detail,newTrigger );
return true;
}
catch( ParseException e )
{
_log.error( \"Unable to parse cron expression for \" + job.getInfo() );
return false;
}
catch( SchedulerException e )
{
_log.error( \"Job scheduling failed for \" + job.getInfo() );
return false;
}
}
带控制台输出
------ LoadJobs.Trigger-44
批量获取1个触发器
Job \'LoadJobs.Job-42 \'的生产实例,class = com.scheduling.LoadScheduleJob
在作业JobJobs.Job-42上调用执行
批量获取1个触发器
需要的职位:42:44
------ LoadJobs.Trigger-45
42的作业调度失败:45-1/5 * *? * *
解决方法
这篇文章给出了一个提示,但是结论(schedulerInstance.add(trigger))从Quartz 2.01开始是无效的。
在将作业关联到触发器之后,请使用以下命令(一种方法是使用TriggerBuilder的forJob方法)
schedulerInstance.scheduleJob( newTrigger )
, CronTrigger trigger=null;
CronTrigger trigger1=null;
CronTrigger trigger2=null;
JobDetail job = new JobDetail();
job.setName(\"dummyJobName\");
job.setJobClass(ExampleJob.class);
trigger = new CronTrigger();
trigger.setName(\"AppTrigger\");
trigger.setGroup(job.getGroup());
trigger.setJobName(job.getName());
trigger.setJobGroup(job.getGroup());
trigger.setCronExpression(\"*/2 * * * * ?\");
trigger1 = new CronTrigger();
trigger1.setName(\"AppTrigger1\");
trigger1.setGroup(job.getGroup());
trigger1.setJobName(job.getName());
trigger1.setJobGroup(job.getGroup());
trigger1.setCronExpression(\"*/2 * * * * ?\");
trigger2 = new CronTrigger();
trigger2.setName(\"AppTrigger2\");
trigger2.setGroup(job.getGroup());
trigger2.setJobName(job.getName());
trigger2.setJobGroup(job.getGroup());
trigger2.setCronExpression(\"*/2 * * * * ?\");
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.addJob(job,true);
scheduler.scheduleJob(trigger);
scheduler.scheduleJob(trigger1);
scheduler.scheduleJob(trigger2);
, 您可以重复调用scheduleJob。只需确保为每个触发器指定一个唯一的名称/组即可。
请参阅TriggerBuilder.withIdentity:http://www.quartz-scheduler.org/docs/api/2.0.0/index.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。