向单个石英作业添加多个触发器
我想动态地将触发器添加到作业中,但无法从 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个触发器
生产作业'LoadJobs.Job-42'的实例,class=com。调度.LoadScheduleJob
调用执行作业 LoadJobs.Job-42
批量获取 1 个触发器
Job Called for: 42 : 44
------ LoadJobs.Trigger-45
作业调度失败 42 : 45 - 1/5 ** ? **
I want to dynamically add triggers to a job, but can't find any helpful methods off of Scheduler
I though i would just be able to call the scheduleJob method an repetitively, but this gives me tthe ObjectAlreadyExists Exception "because one already exists with this identification".
How can i do this?
EDIT
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;
}
}
With Console Output
------ LoadJobs.Trigger-44
batch acquisition of 1 triggers
Producing instance of Job 'LoadJobs.Job-42', class=com.scheduling.LoadScheduleJob
Calling execute on job LoadJobs.Job-42
batch acquisition of 1 triggers
Job called for: 42 : 44
------ LoadJobs.Trigger-45
Job scheduling failed for 42 : 45 - 1/5 * * ? * *
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这篇文章给出了一个提示,但是结论(schedulerInstance.add(trigger ) ) 自 Quartz 2.01 起无效。
而是在将作业分配给触发器后使用以下内容(一种方法是使用 TriggerBuilder 的 forJob 方法)
This post gives a hint, but the conclusion ( schedulerInstance.add(trigger) ) is not valid as of Quartz 2.01.
Instead use the following, after assinging the job to the trigger ( one way is using the TriggerBuilder's forJob method )
您可以重复调用scheduleJob。只需确保为每个触发器指定一个唯一的名称/组即可。
请参阅 TriggerBuilder.withIdentity:http://www.quartz-scheduler。 org/docs/api/2.0.0/index.html
You can call scheduleJob repeatedly. Just make sure that you give each Trigger a unique name/group.
See TriggerBuilder.withIdentity: http://www.quartz-scheduler.org/docs/api/2.0.0/index.html