Spring - 计划任务 - 正常关机

use*_*636 7 java spring spring-mvc scheduled-tasks

我有一个 Spring-Boot 应用程序,其中一个 bean 每隔大约 1 分钟运行一次计划任务,并且这个 bean 有一个@PreDestroy方法。

是否有解决方案允许当前正在执行的任务在生命周期到达预销毁阶段之前完成 - 或者至少给定一些时间来完成?

Gok*_*enG 9

从 Spring Boot 2.1.0 开始,你可以使用这个:

@Bean
TaskSchedulerCustomizer taskSchedulerCustomizer() {
    return taskScheduler -> {
        taskScheduler.setAwaitTerminationSeconds(60);
        taskScheduler.setWaitForTasksToCompleteOnShutdown(true);
    };
}
Run Code Online (Sandbox Code Playgroud)

TaskSchedulerCustomizer 将用于修改配置 ThreadPoolTaskScheduler

细节:

  1. 执行器配置支持
  2. 任务调度器定制器


小智 5

您需要更新配置ThreadPoolTaskScheduler。为waitForJobsToCompleteOnShutdown(method setWaitForTasksToCompleteOnShutdown)设置 true 。

从文档:

设置是否在关机时等待计划任务完成,不中断正在运行的任务并执行队列中的所有任务。默认为“false”,通过中断正在进行的任务和清除队列立即关闭。如果您希望以更长的关闭阶段为代价完全完成任务,请将此标志切换为“true”。

  • 实际上,我刚刚意识到在任务完成之前仍在调用 `@PreDestroy`。我正在使用这样的解决方案:http://stackoverflow.com/a/35017579/1491636 但是我另外将 `setWaitForTasksToCompleteOnShutdown` 标志设置为 true。 (2认同)