使用调度程序的Spring Boot Shutdown

问题描述 投票:0回答:2

我正在使用Spring Boot + Spring Task Scheduler创建一个轮询应用程序。我计划在维护窗口期间使用执行器关闭应用程序(请参阅执行器的关闭端点:http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#production-ready-endpoints)。

我的问题是,在优雅地关闭应用程序之前,Spring是否足够智能完成一个正在进行的任务?如果飞行中的任务在关机前完成,那么Spring是否足够聪明,不会启动另一项任务?

谢谢。

java spring spring-boot spring-boot-actuator spring-scheduled
2个回答
1
投票

您可以通过设置来控制它

ThreadPoolTaskExecutor#waitForTasksToCompleteOnShutdown

为真。

在继承的setter的javadoc中有一个非常好的解释

org.springframework.scheduling.concurrent.ExecutorConfigurationSupport#setWaitForTasksToCompleteOnShutdown

设置是否等待计划任务在关闭时完成,不中断正在运行的任务并执行队列中的所有任务。

默认为“false”,通过中断正在进行的任务和清除队列立即关闭。如果您更喜欢完全完成的任务,而不是更长的停机阶段,请将此标志切换为“true”...

spring scheduler使用默认值a

java.util.concurrent.ThreadPoolExecutor

如javadoc中所述,它不会在关机期间启动新任务

java.util.concurrent.ThreadPoolExecutor#shutdown

启动以前提交的任务执行的有序关闭,但不接受任何新任务...


0
投票

从spring boot 2.1开始,您可以设置以下属性

# Whether to wait for running jobs to complete on shutdown.
spring.quartz.wait-for-jobs-to-complete-on-shutdown=false
© www.soinside.com 2019 - 2024. All rights reserved.