我使用Spring Boot + Spring Task Scheduler来创建轮询应用程序。我计划在维护窗口期间使用执行器关闭应用程序(请参阅执行器的关闭端点:http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#production-ready-endpoints)。
我的问题是,在优雅关闭应用程序之前,Spring是否足够智能完成一个正在进行的任务?如果在关机前完成正在进行的任务,那么Spring是否足够聪明,不能启动另一项任务?
谢谢。
答案 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