単純なタスクがあります。サーバーがダウンしていても、2 か月ごとに初日にプロセスを実行する必要があります。サーバーがダウンしない場合、タスクは非常に簡単です。
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
CronTrigger trigger = new CronTrigger("0 0 1 1 */2 ?");
scheduler.schedule(new Runnable() {
@Override
public void run() {
// do the job
job();
}
}, trigger);
しかし、サーバーがダウンしていて、1 か月前にジョブを実行した場合はどうなるでしょうか? この場合、翌月の初めにジョブを実行したいと考えています。前回ジョブを実行したときにデータベースに保存することにしました。
private void job() {
// Store when the job was executed the last time
}
サーバーが起動したら、もう一度トリガーを開始する必要がありますが、すぐには開始しません。いつトリガーを開始したいかは簡単に計算できますが、残念ながら、適切な関数が見つかりませんThreadPoolTaskScheduler
。定期的に開始時にタスクを実行できる機能があります。
public ScheduledFuture scheduleAtFixedRate(Runnable task, Date startTime, long period)
残念ながら、ThreadPoolTaskScheduler はサポートしていません
public ScheduledFuture schedule(Runnable task, Date startTime, Trigger trigger)
。追加の scheduler.execute を使用して機能を実装しましたが、1 つのスケジュールで実行できるかどうかという質問です。