0

単純なタスクがあります。サーバーがダウンしていても、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)

残念ながら、ThreadPoolTask​​Scheduler はサポートしていません public ScheduledFuture schedule(Runnable task, Date startTime, Trigger trigger) 。追加の scheduler.execute を使用して機能を実装しましたが、1 つのスケジュールで実行できるかどうかという質問です。

4

1 に答える 1

1

java.util.Timerを使用してそれを行い、TimerTask 実装内で次の TimerTask をスケジュールすることができます。

正確に 2 か月にする必要がある場合は、TimerTask の開始時に別の TimerTask をスケジュールする必要があります。それ以外の場合は、TimerTask の終了時にスケジュールすることができます。

于 2013-04-22T12:16:38.227 に答える