定时任务
定时任务模块提供数据库驱动的 Cron 任务调度能力,支持在管理后台动态创建、修改、启停定时任务,无需重启服务。系统内置的任务处理器覆盖数据统计、提醒推送、报表生成等场景,业务模块也可注册自定义处理器。
核心能力
| 能力 | 说明 |
|---|---|
| Cron 表达式 | 6 段式(含秒),如 0 0 9 * * * 表示每天 9:00 执行 |
| 动态管理 | 通过后台 CRUD 任务,修改后自动重载调度器 |
| 手动触发 | 支持手动执行一次(不影响下一次定时触发) |
| 执行日志 | 每次执行自动记录状态、耗时、输出信息、异常堆栈 |
| 处理器注册 | 各业务模块通过 RegisterJobHandler 注册处理器 |
任务管理
任务属性
| 字段 | 说明 |
|---|---|
| 任务名称 | 可读的任务描述 |
| 任务分组 | 任务分类(便于筛选管理) |
| Cron 表达式 | 6 段式:秒 分 时 日 月 周,如 0 */30 * * * *(每 30 分钟) |
| 处理器 | BeanClass 名称,对应代码中注册的处理器标识 |
| 状态 | 运行中 / 暂停 |
调度引擎
调度引擎基于 robfig/cron/v3,服务启动时自动加载所有 status=1 的任务。任务修改后(增删改)会触发调度器重载,动态生效而无需重启。
// 业务模块注册处理器示例
func init() {
enterprise.RegisterJobHandler("ReminderJob", &ReminderHandler{})
}
手动触发
手动触发通过独立的 POST /jobs/:id/run 接口实现,异步执行(fire-and-forget),不阻塞接口返回。执行记录会标注触发来源为 MANUAL。
执行日志
每次任务执行(无论定时还是手动)都会自动生成一条日志记录:
| 字段 | 说明 |
|---|---|
| 状态 | 成功 / 失败 |
| 耗时 | 执行消耗的毫秒数 |
| 输出信息 | 处理器返回的执行结果或日志 |
| 异常堆栈 | 失败时的完整 panic 堆栈 |
| 触发来源 | SCHEDULE(定时触发)/ MANUAL(手动触发) |
异常恢复
调度器内置 panic recovery,单个任务执行 panic 不会影响调度器本身和其他任务的执行。panic 信息会被捕获并记录到执行日志的异常堆栈字段。
内置处理器
| 处理器 | 说明 |
|---|---|
| CRM 跟进提醒 | 每日 9:00 扫描超期未跟进的计划,推送站内消息 |
| 公海回收 | 定时检查长期未跟进的客户/线索,自动回收到公海池 |
| 数据统计 | 定时汇总各模块业务数据,生成日报/周报 |
扩展处理器
新增定时任务处理器需在代码中实现 JobHandler 接口并在模块 init() 中注册,然后即可在后台通过 BeanClass 名称引用。不支持纯后台动态脚本。