4

初めて Quartz をセットアップしようとしていますが、何か理解していない場合はご容赦ください。次のことを達成するための最良の方法は何だろうと思っています。

毎日の電子メール レポートを実行する必要があり、失敗したトリガーから回復できるようにする必要があるジョブをセットアップする方法: 2) サーバーが 3 日間ダウンした場合、Quartz は失敗した 3 日間連続して実行することで回復し、各ジョブが何日を表しているかもジョブに通知します。(それぞれが何日を表しているかを知っている限り、実行順序はそれほど重要ではありません)

今、私はちょうどやっています:

Trigger trigger = newTrigger() 
.withIdentity("dailyTrigger", "scheduledReportEmail") 
.startNow() 
.withSchedule(dailyAtHourAndMinute(0, 5) .withMisfireHandlingInstructionFireAndProceed()) 
.build(); 

これは、何日逃しても、1回実行するだけで回復するようです。あれは正しいですか?

私が考えたアプローチの 1 つは、基本的に、1 日目から 31 日目までの 31 の毎日のトリガーを設定することです。ぎこちない..そして、それらの余分な日のために2月に何が起こるでしょうか? これは最善のアプローチですか?

対処すべき毎週および毎月のトリガーもありますが、3週間ダウンしている場合は、もっと大きな心配事があると思います:)

アドバイスをありがとう....

4

1 に答える 1

10

あなたのユースケースはかなり標準的で、Quartz によってサポートされています。「不発を無視する」ポリシーが必要なだけです。

Trigger trigger = newTrigger() 
  .withIdentity("dailyTrigger", "scheduledReportEmail") 
  .withSchedule(dailyAtHourAndMinute(0, 5)
  .withMisfireHandlingInstructionIgnoreMisfires()) 
  .build(); 

これは基本的に次のことを意味します: トリガーが失火したかどうかは気にせず、できるだけ早く実行してください (アプリケーションの起動時である可能性が最も高い)。

指定されたトリガーがいつ実行されると想定されているか (現在の時刻ではなくスケジュールされた時刻) を把握するには、ジョブでこれを実行します。

void execute(JobExecutionContext context) {
  final Date scheduled = context.getScheduledFireTime()
  //...
}

こちらもご覧ください

于 2013-01-08T20:04:08.857 に答える