1

同じジョブを実行しているトリガー間で再試行カウント データを保持したいと考えています。

DirtyHashMap である JobExectionContext.JobDetails.JobDataMap に格納してみました。保存されますが、2回目に同じジョブが異なるトリガーで実行され、そのトリガーが同じキーの値を更新した場合、それは保持されません。そのため、3 回目にアクセスすると、キー値は最初のものと同じままです。

注: Job クラスで @PersistJobDataAfterExecution を使用して、テラコッタではなく通常どおり実行すると機能します

擬似コードは次のとおりです。

Cron トリガー 1: CronTrigger.executionComplete() で > 失敗した場合 > retryCount をインクリメントし、jobcontext JobDataMap に設定 > 新しい SimpleTrigger で同じジョブを再スケジュール (コンテキスト 0 での再試行回数、新しい値セット 1)

単純なトリガー 1: SimpleTrigger.executionComplete() で > 失敗した場合 > retryCount をインクリメントし、jobcontext JobDataMap に設定 > 新しい SimpleTrigger で同じジョブを再スケジュール (コンテキスト 1 での再試行回数、新しい値セット 2)

単純なトリガー 2: SimpleTrigger.executionComplete() で > 失敗した場合 > retryCount をインクリメントし、jobcontext JobDataMap に設定 > 新しい SimpleTrigger で同じジョブを再スケジュール

(コンテキスト内の再試行回数は 1 のままで、新しい値は 2 に設定されます)

これが問題の場所です。最初に設定した後、再試行回数が増加しません。繰り返しますが、これはテラコッタ ジョブストアで実行した場合にのみ発生します。単一のインスタンスで完全に持続します。

何か案が?

4

1 に答える 1

0

同様の問題を抱えている人に役立つ解決策を見つけました。問題は、テラコッタのバージョンが 3.5.2 で、クォーツ 2 以降をサポートしていないことでした。したがって、 @PersistJobDataAfterExecution は機能しませんでした。だから私は非推奨の StatefulJob インターフェースを実装しましたが、それは魅力的に機能しました!

于 2012-10-25T15:01:41.203 に答える