同一个 Job Quartz.NET 的多个触发器 [英] Multiple triggers of same Job Quartz.NET
本文介绍了同一个 Job Quartz.NET 的多个触发器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下代码:
IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
scheduler.Start();
IJobDetail job = JobBuilder.Create<EmailJob>().StoreDurably().WithIdentity("J_Email", "J_Mailing").Build();
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("MailTrigger1", "T_Mail1")
.StartNow()
.WithSimpleSchedule(x => x.WithMisfireHandlingInstructionIgnoreMisfires()
.WithIntervalInSeconds(3)
.RepeatForever())
.Build();
ITrigger triggernew = TriggerBuilder.Create()
.WithIdentity("MailTrigger", "T_Mail")
.StartNow()
.WithSimpleSchedule(x => x.WithMisfireHandlingInstructionIgnoreMisfires()
.WithIntervalInSeconds(5)
.RepeatForever())
.Build();
scheduler.ScheduleJob(job,triggernew);
scheduler.ScheduleJob(job,trigger);
我收到以下异常:
'Quartz.ObjectAlreadyExistsException' 类型的未处理异常发生在 Quartz.dll 中
An unhandled exception of type 'Quartz.ObjectAlreadyExistsException' occurred in Quartz.dll
附加信息:无法存储作业:'J_Mailing.J_Email',因为已经存在具有此标识的人.
Additional information: Unable to store Job: 'J_Mailing.J_Email', because one already exists with this identification.
但有人告诉我,同一个 JOB 可以有多个触发器.也许我做错了什么?
But I have been told that you can have multiple triggers of the same JOB. Maybe I am doing something wrong?
推荐答案
将作业添加到调度程序.
Add the Job to the Scheduler.
然后在创建触发器时,使用 ForJob
.
Then on the creation of the triggers, use ForJob
.
下面的代码已经过测试.
The code below is tested.
IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
//// scheduler.DeleteJob(new JobKey("J_Email"));
IJobDetail job = JobBuilder.Create<MyConcreteJob>().StoreDurably().WithIdentity("J_Email", "J_Mailing").Build();
scheduler.AddJob(job, true /* bool replace */ ); /* Add the given IJob to the Scheduler - with no associated ITrigger. */
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("MailTrigger1", "T_Mail1")
.StartNow()
.WithSimpleSchedule(x => x.WithMisfireHandlingInstructionIgnoreMisfires()
.WithIntervalInSeconds(3)
.RepeatForever())
.ForJob(job)
.Build();
ITrigger triggernew = TriggerBuilder.Create()
.WithIdentity("MailTrigger", "T_Mail")
.StartNow()
.WithSimpleSchedule(x => x.WithMisfireHandlingInstructionIgnoreMisfires()
.WithIntervalInSeconds(5)
.RepeatForever())
.ForJob(job)
.Build();
scheduler.ScheduleJob(triggernew);
scheduler.ScheduleJob(trigger);
scheduler.Start();
这篇关于同一个 Job Quartz.NET 的多个触发器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文