2011-07-03 9 views
0

私はQuartz.NETの最新バージョンで遊んでいます。私はAdoJobStore(SqlServer-20デリゲート付き)を使用して自分のジョブを保存しています。私は新しい仕事をこのように作成します。Quartz.NETとデッドロック

 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ファイルのテーブル名とカラム名を変更しました。

ご協力ありがとうございました

答えて

1

私は何が間違っているかを見つけました。 SQL Serverを使用する場合のように、varcharデータ型を使用しないでください。 Quartz.NETにはいくつか問題があります。代わりに、nvarcharに切り替えると問題は解決されます。

+0

これを解決するには、QRTZ_テーブルの列をvarcharからnvarcharに切り替えましたか?また、あなたが最新のバージョンを言うとき、あなたが気にしていたバージョンは? –