定时任务不要只关注能不能跑
定时任务不要只关注能不能跑
定时任务写起来很快,但线上最容易出问题的地方往往不是能不能触发,而是重复执行、执行失败、部分成功、没人发现和无法重跑。
任务要能重复执行
定时任务可能因为发布、调度抖动、人工补偿而重复触发。如果任务逻辑不幂等,重复执行就可能造成重复扣款、重复通知、重复生成数据。
所以任务入口要和普通接口一样考虑幂等。可以通过业务状态、任务记录、唯一标识等方式保护。
失败要可恢复
任务失败后不能只依赖下一轮自然执行。有些任务错过时间窗口后需要补偿,有些任务需要从上次成功的位置继续。任务执行记录就很重要。
记录里至少应该能看出任务开始、结束、处理范围、结果和失败原因。这样人工介入时才有依据。
要有观察入口
定时任务如果只在日志里出现,维护成本会很高。最好能有任务列表、执行历史、失败详情和手动重跑入口。这样运营、测试和开发都能看到任务状态。
没有观察入口的定时任务,出问题时往往只能靠猜。
复盘
定时任务是一种后台业务流程,不是简单的时间触发器。它需要幂等、记录、补偿、告警和重跑能力。能跑只是开始,能维护才是重点。
参考
- Spring Scheduling 文档:https://docs.spring.io/spring-framework/reference/integration/scheduling.html
- Quartz 文档:https://www.quartz-scheduler.org/documentation/