クォーツが重複処理を実行しないようにするには
クォーツでタスクが重複して実行されないことを保証する方法は2種類あります。
- JobDataMapを使用したパラメータの引き渡し:ジョブの作成時に、ジョブのパラメータをJobDataMapに格納できます。Quartzは、JobDataMapのパラメータに基づいて、ジョブがすでに実行されたかどうかを判断します。JobDataMapのパラメータが変更された場合、Quartzはジョブが新しいと判断し、再び実行します。
- 固有の識別子を使用する:ジョブを作成する際、各ジョブに固有の識別子(JobKey)を割り当てることができます。クォーツは識別子に基づいてジョブの実行済みかどうかを判断します。同一の識別子が既に存在する場合、クォーツはジョブが重複していると見なし、再実行しません。
いずれの方法を用いても、Quartzは設定したスケジュールルールにしたがって、タスクを実行するタイミングを判断します。タスクのスケジュールルールが条件を満たしていても、タスクが既に実行済みとして判断された場合は、タスクはスキップされ、次回のスケジュールが条件を満たすまで実行されません。