在Azure上存储Quartz.NET作业时出现“现有作业”错误

时间:2012-06-26 20:19:10

标签: c# azure quartz.net

如何在不抛出以下错误的情况下创建adojobstore:

 Unable to store job because one already exists with this identification.

我可以从数据库中读取并检查作业是否不存在然后将其添加到调度程序中吗? 这是推荐的做法吗?

是否有必要在Azure上关闭调度程序?

1 个答案:

答案 0 :(得分:2)

当您使用AdoJobStore时,您正在DB中保存作业,因此您可以确保在安排作业之前单独检查表中是否存在作业,否则只需使用具有相同JobID的AddJob并确保创建持久作业。

可以重复使用的作业必须是持久的,这意味着即使未安排作业,作业仍然存在,这意味着没有附加触发器。耐用工作的一个例子如下:

dJob = new JobDetail("consolidate-attendance", "daily-attendance-group", 
              ConsolidateAttendance.class,
              /* volatile */ false, 
              /* durable */ true,
              /* recover */ false);
sched.addJob(jobContext, dJob, false);

ScheduleJob有两个版本,一个带有触发器和另一个作业的接受作业,所以你需要确定你将使用哪一个。如果您已经定义了作业,则不能使用同时接受作业和触发器的ScheduleJob,因为调度程序会在内部尝试将作业添加到自身并失败。

当已定义作业时,您只需要通过Trigger类将触发器与触发器绑定,并使用仅接受触发器的scheduleJob。

这应该可以工作,您不需要关闭调度程序。