2011-06-30 14 views
0

Spring 3とQuartz 1.8.5を使用してクラスターモードでジョブをスケジュールしています。私は、Springのスケジューラー設定でoverwriteExistingJobs = trueを配置しました。クラスタモードのSpringとQuartzの統合で既存のジョブが上書きされない

Quartzジョブを使用した設定の一部であるジョブとは別に、動的にジョブをプログラムで作成する必要があります。すべて私はサーバーを再起動するまで正常に動作します。この時点で、overwriteExistingJobs = trueに問題があります。

2分ごとに実行するように作成された動的ジョブがあるとします。そして、10分後にサーバーを停止して起動すると、サーバーの起動直後にジョブが5回実行されます。しかし、春の文書にあるような春の設定の一部であるジョブがある場合、それはサーバが再起動すると上書きされます。

私の観察は、春の設定ファイルで設定して、QRTZ_TRIGGERSテーブルの PREV_FIRE_TIMEはに更新される「-1」org.springframework.scheduling.quartz.SchedulerFactoryBeanに追加しますが、動的にするために作成されたジョブのためにそれをされていますジョブは上書きされません。次のように

答えて

1

修正は次のとおりです。

A)私は私がやったことは誤火災命令を提供することでした動的なジョブに関連付けられているCronTriggersを持っています。

JobDetail jobDetail = new JobDetail(job.getDescription(), job.getName(),job.getClass()); 
CronTrigger crTrigger = new CronTrigger("cronTrigger", job.getName(), cronExpression); 
crTrigger.setStartTime(firstFireTime); 
crTrigger.setMisfireInstruction(CronTrigger.MISFIRE_INSTRUCTION_DO_NOTHING); 
scheduler.scheduleJob(jobDetail, crTrigger); 

b)ミスファイアのしきい値はかなり高い(6000000)。だから、私がやったのは、失火の閾値を下げることだったし、魅力的だった。

関連する問題