Spring MVC Spring -计划任务-优雅的任务

hc2pp10m  于 2023-10-24  发布在  Spring
关注(0)|答案(4)|浏览(200)

我有一个Spring-Boot应用程序,其中有一个bean以大约1分钟的间隔运行一个预定任务,这个bean有一个@PreDestroy方法。
是否有一种解决办法,使目前正在执行的任务能够在生命周期达到销毁前阶段之前完成-或至少有一段时间来完成?

yks3o0rb

yks3o0rb1#

从Sping Boot 2.1.0开始,您可以使用:

@Bean
TaskSchedulerCustomizer taskSchedulerCustomizer() {
    return taskScheduler -> {
        taskScheduler.setAwaitTerminationSeconds(60);
        taskScheduler.setWaitForTasksToCompleteOnShutdown(true);
    };
}

TaskSchedulerCustomizer将用于修改已配置的ThreadPoolTaskScheduler
详细信息:
1.执行官职位支持

  1. TaskSchedulerCustomizer
rkttyhzu

rkttyhzu2#

您需要更新ThreadPoolTaskScheduler的配置。为waitForJobsToCompleteOnShutdown设置true(方法setWaitForTasksToCompleteOnShutdown)。
来自文件:
设置是否在关机时等待计划任务完成,不中断正在运行的任务并执行队列中的所有任务。默认值为“false”,即通过中断正在进行的任务并清除队列来立即关机。如果您希望完全完成任务,但需要较长的关机阶段,请将此标志切换为“true”。

aydmsdu9

aydmsdu93#

@Matej是对的。像这样的东西应该会起作用

@Bean
  public ThreadPoolTaskScheduler setSchedulerToWait(ThreadPoolTaskScheduler threadPoolTaskScheduler){
   threadPoolTaskScheduler.setWaitForTasksToCompleteOnShutdown(true);
   return threadPoolTaskScheduler;
 }
r8uurelv

r8uurelv4#

在以后版本的spring Boot 中,还可以通过application.properties设置这些属性。

server.shutdown=graceful
spring.lifecycle.timeout-per-shutdown-phase=60s
spring.task.execution.shutdown.await-termination=true
spring.task.execution.shutdown.await-termination-period=60s
spring.task.scheduling.shutdown.await-termination=true
spring.task.scheduling.shutdown.await-termination-period=60s

相关问题