我有一个Spring应用程序,其中一个bean以大约1分钟的间隔运行一个预定的任务,这个bean有一个@PreDestroy方法。
是否有解决方案允许当前正在执行的任务在生命周期到达预销毁阶段之前完成--或者至少有一段时间来完成?
发布于 2017-04-27 21:19:09
您需要ThreadPoolTaskScheduler的更新配置。为waitForJobsToCompleteOnShutdown (方法setWaitForTasksToCompleteOnShutdown)设置true。
来自文件:
设置是否等待计划任务在关闭时完成,而不是中断正在运行的任务和执行队列中的所有任务。默认值为"false",通过中断正在进行的任务和清除队列立即关闭。如果您喜欢完全完成任务,而牺牲了较长的关机阶段,则将此标志切换为"true“。
发布于 2019-07-22 15:28:10
从SpringBoot2.1.0开始,您可以使用以下内容:
@Bean
TaskSchedulerCustomizer taskSchedulerCustomizer() {
return taskScheduler -> {
taskScheduler.setAwaitTerminationSeconds(60);
taskScheduler.setWaitForTasksToCompleteOnShutdown(true);
};
}TaskSchedulerCustomizer将用于修改配置的ThreadPoolTaskScheduler
详细信息:
发布于 2017-04-28 07:09:21
@Matej是对的。像这样的事情应该能起作用
@Bean
public ThreadPoolTaskScheduler setSchedulerToWait(ThreadPoolTaskScheduler threadPoolTaskScheduler){
threadPoolTaskScheduler.setWaitForTasksToCompleteOnShutdown(true);
return threadPoolTaskScheduler;
}https://stackoverflow.com/questions/43664259
复制相似问题