4

私は Quartz Scheduler (プロジェクトの制約によりバージョン 1.8.3) を使用しており、プロジェクト固有のジョブ用に「MS Outlook のような」スケジューラを作成するタスクを割り当てられています。すべてが正常に動作しているように見えますが、CronTriggers に非常に大きな問題があります (この問題は Quartz のバージョン 2.1 にも存在します)。

DAILY、WEEKLY、MONTHLY の繰り返しパターンに CronTriggers を使用しています。繰り返しパターンに加えて、「いいえ」のオプションも提供します。発生の」。これは私の人生の悩みの種になりました!CronTrigger は、SimpleTriggers のように「repeatCount」のオプションを提供しません (バグ: https://jira.terracotta.org/jira/browse/QTZ-242?page=com.atlassian.jira.plugin.system.issuetabpanels%3Achangehistory-タブパネル)。どうやらこれはバージョン 2.2 で修正される可能性がありますが、それほど長く待つことはできませんし、私の問題が固有のものであるとは信じていません!

調査に値すると思われるいくつかのオプション:

  1. CronTrigger の「EndTime」を計算しますが、独自のロジックを使用します。これは考えられるすべてのケースをカバーするものではなく、単純なケースでもせいぜい概算です。

  2. いいえを追跡するには、TriggerListener または JobListener を使用します。「N」回の反復後にジョブを停止する必要があり、ジョブインスタンスからトリガーへの1:1のマッピングがあるため、ジョブの反復の数。これは、どう考えても実行可能でも効率的でもないように思えます。

CronTriggers を「No. この難問を解決する方法についての洞察を教えてください。

4

2 に答える 2

4

Quartz が役立つものを実装しているようです: 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();

これが機能しない場合は、ここここで述べたように、繰り返し回数を設定できず、TriggerListener を使用する必要があります。

いずれにせよ、バージョン 2.2 にはこの機能がありません。

アップデート

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

于 2014-10-12T16:21:46.593 に答える
0

代わりにシンプルトリガーを使用しないのはなぜですか?ジョブのスケジュール時に時間間隔を計算する追加の作業がありますが、それは1回限りのアクティビティになります。

于 2012-01-13T03:27:04.793 に答える