使用调度程序的Spring Boot Shutdown

时间:2017-01-27 22:05:52

标签: java spring spring-boot spring-boot-actuator spring-scheduled

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

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

谢谢。

2 个答案:

答案 0 :(得分:1)

您可以通过设置

来控制它
ThreadPoolTaskExecutor#waitForTasksToCompleteOnShutdown

为真。

在继承的setter

的javadoc中有一个非常好的解释
org.springframework.scheduling.concurrent.ExecutorConfigurationSupport#setWaitForTasksToCompleteOnShutdown
  

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

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

spring scheduler使用默认值

java.util.concurrent.ThreadPoolExecutor

,如

中的javadoc所述,它不会在关机期间启动新任务
java.util.concurrent.ThreadPoolExecutor#shutdown
  

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

答案 1 :(得分: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