Springのスケジューラーを停止する方法
Spring Timerは2つの停止方法があります。
- @Scheduledアノテーションを使用したメソッドを停止するには、メソッドにScheduledFuture型の引数を追加し、タイマーを停止する必要がある場所でScheduledFuture.cancelメソッドを呼び出します。
@Scheduled(fixedRate = 1000)
public void someTask(ScheduledFuture<?> scheduledFuture) {
// 业务逻辑
if (需要停止定时器的条件) {
scheduledFuture.cancel();
}
}
- TaskSchedulerのインターフェースメソッドを使って停止する: TaskSchedulerインスタンスを注入して、TaskScheduler.schedule()メソッドから返されたScheduledFutureオブジェクトのcancel()メソッドを呼び出せばタイマーを停止できます。
@Autowired
private TaskScheduler taskScheduler;
public void startTask() {
ScheduledFuture<?> scheduledFuture = taskScheduler.schedule(new Runnable() {
@Override
public void run() {
// 业务逻辑
}
}, new CronTrigger("*/5 * * * * *")); // 定时表达式
// 业务逻辑
if (需要停止定时器的条件) {
scheduledFuture.cancel();
}
}
タイマーを停止する場合、cancelメソッドを呼び出す場所にあるScheduledFutureオブジェクトに、タイムタスクを保持しておく必要があります。