我目前正在项目中使用Quartz .NET 1.0.3版。出于某种原因,我无法将其升级到最新版本。
这些是我使用的方法:
ScheduleUnreserveCarJob
Trigger trigger = CreateTrigger(typeof(UnreserveCarJob), lotId.ToString(), startTimeUtc);
trigger.JobDataMap.PutAsString(JobDataMapKeys.LotId, lotId);
scheduler.ScheduleJob(trigger);
UnreserveCarJob
[SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods")]
protected override void ExecuteJob(JobExecutionContext context)
{
using (IAuctionProcessClient auctionProcessClient = new AuctionServiceClient())
{
var request = LotGetRequest(context.MergedJobDataMap);
auctionProcessClient.LotGet(request);
}
}
private static LotGetRequest LotGetRequest(JobDataMap jobDataMap)
{
return new LotGetRequest { Lot = jobDataMap.GetInt(JobDataMapKeys.LotId) };
}
CreateTrigger
var jobTypeName = jobType.Name;
return new SimpleTrigger
{
Group = jobTypeName,
JobName = jobTypeName,
MisfireInstruction = MisfireInstruction.SimpleTrigger.FireNow,
Name = name,
StartTimeUtc = startTimeUtc
};
当我想从ScheduleJob
执行ScheduleUnreserveCarJob
时,我总是收到错误The job DEFAULT.UnreserveCarJob referenced by the trigger does not exist
。
触发器保存在数据库中,因此在QRTZ_JOB_LISTENERS和QRTZ_JOB_DETAILS中,我有一行有JOB_NAME UnreserveCarJob
和JOB_GROUP DEFAULT
。
这个问题可能是什么原因?
修改 我手动插入了QRTZ_JOB表的详细信息,因此触发器可以转到QRTZ_TRIGGERS表(由于FK而这样做)。我的猜测是Quartz.dll没有在DB中插入任何行。我还是不知道为什么。
编辑2:
我跟踪了SQL Server Profiler的问题,问题出在scheduler.ScheduleJob(trigger);
。运行此行时,必须在QRTZ_TRIGGERS和QRTZ_SIMPLE_TRIGGERS上进行INSERT。不幸的是,我得到The job referenced by the trigger does not exist
。出于某种原因,quartz.dll没有插入表中。