2012-01-01 2 views
4

私はQuartz Scheduler(プロジェクトの制約のためバージョン1.8.3)を使用しています。私は自分のプロジェクトに固有のジョブのための "MS Outlookのような"スケジューラを作成するタスクを割り当てました。すべて正常に動作するように見えますが、私はCronTriggersに大きな問題があります(この問題はQuartzのバージョン2.1にもあります):シミュレーションする方法JavaのCronTriggersで「発生回数」または「繰り返し回数」を確認できますか?

私はCronTriggersを毎日、毎週、月曜日の繰り返しパターンに使用しています。再発パターンに加えて、「No」というオプションも提供します。出現のこれは私の人生の悩みになっています! CronTriggerはSimpleTriggers do(bug:https://jira.terracotta.org/jira/browse/QTZ-242?page=com.atlassian.jira.plugin.system.issuetabpanels%3Achangehistory-tabpanel)のように 'repeatCount'のオプションを提供していません。どうやらこれはバージョン2.2で修正されるかもしれませんが、私はそれを待つことができず、私の問題は一意だとは思わないでしょう!

私は調査の価値があるとみなされるいくつかのオプション:

  1. はCronTriggerのための「終了時間」を計算しますが、私の独自のロジックを使用して - これは、すべての可能なケースをカバーするために失敗したとさえのためにせいぜいに近似しています簡単な場合。

  2. いいえを追跡するためにTriggerListenerまたはJobListenerを使用します。 'N'反復後にジョブを停止する必要があるだけで、JobインスタンスからTriggerへの1:1マッピングがあるため、ジョブの反復回数が増えます。これは想像力の伸びによって実現可能ではなく、かつ/または効率的ではないようです。

「CronTriggers」のオプションを使用している人はいますか?この問題を解決する方法についてのいくつかの洞察を教えてください。

答えて

0

代わりにSimple Triggerを使用しないでください。ジョブのスケジューリング時に時間間隔を計算する追加のタスクがありますが、それは1回限りのアクティビティーになります。

3

クォーツは、TriggerUtils.computeEndTimeToAllowParticularNumberOfFiringsの助けとなるものを実装しているようです。

私はまだそれをテストしていませんが、これは私が今のために書いているコードです:

CronTrigger trigger = newTrigger() 
    .withSchedule(cronSchedule(cronExpression)) 
    .build(); 
Date endDate = TriggerUtils.computeEndTimeToAllowParticularNumberOfFirings((OperableTrigger) trigger, 
       new BaseCalendar(Calendar.getInstance().getTimeZone()), 10); 
trigger = trigger.getTriggerBuilder().endAt(endDate).build(); 

、これは動作しません場合は、herehere、あなたが設定することはできません言ったようにリピート回数、TriggerListenerを使用する必要があります。

いずれの場合でも、バージョン2.2にはこの機能はありません。

更新

私はそれをテストしてきた、それが動作します。

関連する問題