通常、午前0時にスケジュールされたジョブ(サーバーは省エネモードに入ったため実行できませんでした)は、サーバーが省エネルギーモードから復帰した後に実行されます。これにより、予期しない実行時間が発生します。スケジュールされた時間を過ぎたジョブを実行しない方法
Quartzが目標時間をはるかに過ぎた後にジョブを実行しないように指示する方法はありますか?
通常、午前0時にスケジュールされたジョブ(サーバーは省エネモードに入ったため実行できませんでした)は、サーバーが省エネルギーモードから復帰した後に実行されます。これにより、予期しない実行時間が発生します。スケジュールされた時間を過ぎたジョブを実行しない方法
Quartzが目標時間をはるかに過ぎた後にジョブを実行しないように指示する方法はありますか?
はい。 job misfiresについて何をするべきかQuartzに伝えるだけでよい:
トリガーのもう1つの重要な特性は、「失火指示」です。スケジューラがシャットダウンされているため、またはジョブを実行するためにQuartzのスレッドプールに使用可能なスレッドがないため、永続的なトリガが起動時間を「失う」場合、失火が発生します。異なるトリガタイプには、異なる失火命令があります。デフォルトでは、スマートポリシー命令を使用します。この命令は、トリガーの種類と構成に基づいて動的な動作をします。スケジューラが起動すると、失火した永続トリガが検索され、個別に設定された失火指示に基づいて各トリガが更新されます。自分のプロジェクトでQuartzを使用するときは、与えられたトリガタイプで定義されている不具合の指示に精通し、JavaDocで説明されている必要があります。
具体的な失火の指示は、使用しているTrigger
の種類によって異なります。毎日の仕事のためには、これは次のようなものかもしれません。
しかし、やはりトリガーのタイプによって異なります。 IDEを使用してのメソッドを確認し、withMisfireHandlingInstructionDoNothing
またはwithMisfireHandlingInstructionNextWithRemainingCount
のいずれかを使用してください(どちらも実行されなかったものは無視され、次にスケジュールされたものを待機します)。
QuartzのチュートリアルやAPIのドキュメントに加えて、様々なタイプの不規則な命令について知りたいときは、this blog entryを使用しました。
ありがとうございます!このTriggerBuilder.newTrigger()。withSchedule(CronScheduleBuilder.cronSchedule(cronSchedule).withMisfireHandlingInstructionDoNothing())。build(); 'のようなCronTriggerを使用します。それが問題を解決するかどうかはわかりますが、私は自信があります。 –
@MartinFernauどうしたの? – walen
はすばらしいと思われます。今日のテストでは、ジョブはそれ以上実行されないことが示されています。ありがとう! –