我正在玩最新版本的Quartz.NET。我正在使用AdoJobStore(使用SqlServer-20委托)来存储我的作业。我用这种方式创造了新的工作:
JobDetail jobDetail = new JobDetail("myJob", null, typeof(HelloJob));
jobDetail.JobDataMap["dsa"] = "hello";
CronTrigger trigger = new CronTrigger("MyTrigger", null, "0/1 * * * * ?");
trigger.StartTimeUtc = TriggerUtils.GetEvenHourDate(DateTime.UtcNow.AddMonths(-3));
trigger.Name = "MyTrigger";
sched.ScheduleJob(jobDetail, trigger);
//另一份工作
JobDetail jobDetail = new JobDetail("myJob_Bye", null, typeof(HelloJob));
jobDetail.JobDataMap["dsa"] = "Good Bye";
CronTrigger trigger = new CronTrigger("MyTrigger", null, "0/2 * * * * ?");
trigger.StartTimeUtc = TriggerUtils.GetEvenHourDate(DateTime.UtcNow.AddMonths(-3));
trigger.Name = "MyTrigger2";
sched.ScheduleJob(jobDetail, trigger);
问题在于,当我启动调度程序时,它适用于某些(触发上面配置的作业)时间,然后抛出SqlException,消息“事务(进程ID 53)在锁资源上与另一个进程死锁,并被选为死锁的受害者。重新运行交易。“ 在JobStoreSupport.cs,第4217行中发生错误。看起来锁定处理存在问题。任何人都知道如何解决这个问题。
P.S。这个石英组件是我正在玩的自定义构建。我刚刚更改了AdoConstants.cs中的表名和列名以及相应的.sql文件。
感谢您的支持
答案 0 :(得分:1)
我发现了什么问题。看起来在使用SQL Server时,不应使用varchar数据类型。 Quartz.NET有一些问题。相反,切换到nvarchar,问题将得到解决。