quartz.net - 同一个 Job Quartz.NET 的多个触发器

标签 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);

我收到以下异常:

An unhandled exception of type 'Quartz.ObjectAlreadyExistsException' occurred in Quartz.dll

Additional information: Unable to store Job: 'J_Mailing.J_Email', because one already exists with this identification.



但有人告诉我,同一个 JOB 可以有多个触发器。也许我做错了什么?

最佳答案

将作业添加到调度程序。

然后在创建触发器时,使用 ForJob .

下面的代码已经过测试。

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();

关于quartz.net - 同一个 Job Quartz.NET 的多个触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35796696/

相关文章:

c# - 使用Quartz.NET监控Mysql表并执行一些东西

c# - JobDetail 记录可以重复使用吗?如何重复使用?

scheduling - 使用 Quartz/Scheduling 的 Mass Transit - 是否有任何示例实现?

c# - Quartz.net + 任务并行库

c# - 如何让 Quartz 每第 n 个月启动一次工作而不会在一月份中断?

.net - quartz .NET, "Error communicating with remote scheduler."

c# - 如何忽略 Quartz.Net 中的失火?

c# - 避免 quartz 表失误

quartz.net - 如何防止 quartz 作业多次运行

c# - 在不遍历所有作业的情况下检查作业是否存在