---
name: scheduled-task
when: '定时任务, 异步任务, cron, 调度, @Scheduled, 异步执行, 重试, 延迟任务, 周期任务, 后台任务, 定时执行'
scope:
  - backend
products:
  - '*'
id: ka-pattern-scheduled-task
asset_kind: pattern
lifecycle_status: active
authority: supporting
routes:
  - '*'
primary_triggers:
  - 定时任务
  - 异步任务
  - cron
  - 调度
  - '@Scheduled'
  - 异步执行
  - 重试
  - 延迟任务
  - 周期任务
  - 后台任务
  - 定时执行
priority: P2
specificity: 3
version: 1.0.0
last_reviewed: '2026-05-22'
consumes: []
emits: []
secondary_triggers: []
negative_triggers: []
type: pattern
status: active
---

## 决策规则
- 多实例部署的定时任务必须使用分布式锁，禁止裸 @Scheduled
- 每次执行必须记录状态（开始/结束时间、结果、错误信息）
- 执行失败必须有告警通知（钉钉/邮件/Slack）
- 任务执行时间不得超过调度间隔的一半，防止堆积
- 失败任务必须有重试机制（建议最多 3 次）
- 定时任务必须配置超时时间，防止任务卡死影响后续调度
- 定时任务禁止使用固定间隔执行长事务，必须拆分为小批次处理
- 定时任务必须有手动触发入口（管理后台或 API），便于紧急修复数据

## 验收项
- [AC-01] 分布式锁防重复执行
- [AC-02] 每次执行记录状态
- [AC-03] 失败有告警通知
- [AC-04] 执行时间不超调度间隔一半
- [AC-05] 任务有超时配置
- [AC-06] 有手动触发入口
