【问题标题】:'Existing Job' error when storing Quartz.NET job on Azure [closed]在 Azure 上存储 Quartz.NET 作业时出现“现有作业”错误 [关闭]
【发布时间】:2026-01-21 07:20:10
【问题描述】:

如何在不引发以下错误的情况下创建 adojobstore:

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

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

是否需要关闭 Azure 上的调度程序?

【问题讨论】:

标签: c# azure quartz.net


【解决方案1】:

当您使用 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 接受作业和触发器,因为在内部调度程序会尝试将作业添加到自身并失败。

当job已经定义好后,只需通过Trigger类绑定job和trigger,使用只接受触发器的scheduleJob即可。

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

【讨论】:

  • 谢谢您,非常感谢您的详细回复。在我的工作中,我有这样的代码..我找不到 JobDetail 方法。我错过了什么吗? IJobDetail job = JobBuilder.Create() .WithIdentity("testjob", "jobgroup") .Build(); ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create() .WithIdentity("testtrigger", "jobgroup") .WithCronSchedule("0 30 0/1 1/1 * ? *") .Build();日期时间偏移英尺; ft = sched.ScheduleJob(job, trigger);
  • 请看一下这个帖子,因为它有 JobDetails() 实现 pandiyachendur.blogspot.com/2010/07/…
  • 谢谢。这个链接很有帮助。
  • 很高兴您发现这些信息很有用,并希望您的问题能够得到解决。完成后告诉我。
最近更新 更多