![](/img/trans.png)
[英]Quartz Scheduler Issue in setting multiple triggers for a single job
[英]Add multiple triggers to single quartz job
我想动态地将触发器添加到作业中,但在调度程序中找不到任何有用的方法
我虽然只能重复调用 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;
}
}
带控制台 Output
------ LoadJobs.Trigger-44
批量获取 1 个触发器
生产作业'LoadJobs.Job-42'的实例,class=com.scheduling.LoadScheduleJob
在作业 LoadJobs.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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.