如何将任务调度应用优雅下线

本文介绍如何将任务调度应用优雅下线。

背景信息

在实际业务场景下,定时任务持续地按固定频率在应用进程中执行。当应用在发布重启时,进程需暂时下线。如果直接关闭应用,正在进行中的定时任务将被中断,可能导致数据不完整或其他问题。为避免该情况,SchedulerX实现了定时任务的优雅下线功能,在关闭应用前,需等待当前正在进行的任务执行完成后,然后再安全地关闭应用。

使用限制

客户端版本≥1.10.8。

如何配置

离线定时任务不同于实时在线业务场景,可能存在执行长耗时的特性,但是应用进程在停机时不会无限等待。您可以通过以下配置设置存在运行中的任务的应用延迟停机的时间。

# 优雅下线模式,WAIT_ALL:等待全部; WAIT_RUNNING:等待运行中。
# 该参数不配置则不启用优雅下线功能(默认不开启优雅下线)。
spring.schedulerx2.graceShutdownMode=WAIT_ALL
# 优雅下线等待超时时长(单位:秒),默认无超时。
spring.schedulerx2.graceShutdownTimeout=10

下线模式

描述

等待全部(WAIT_ALL

该模式下,待所有已接收的任务和子任务执行完成后,应用才退出。(推荐)

等待运行中(WAIT_RUNNING

该模式下,应用在退出时,将等待已分配线程并在处理中的任务或子任务执行完成,队列中的任务将被放弃执行。

重要

执行下线脚本停止业务应用时,不能直接采用kill -9,否则该能力将失效。部分业务应用下线的脚本先采用kill -15,监测并等待一段时间后,再执行kill -9命令强制停止。建议根据应用任务的特征合理设置下线等待的时间,防止发布过程过慢。