定时任务
使用 node-cron,封装在 src/core/schedule/ScheduleManager.ts。
能力与限制
| 项 | 说明 |
|---|---|
| 调度引擎 | node-cron(进程内) |
| 配置来源 | 表 sys_schedule + 启动时加载启用任务 |
| 多实例 | 不内置集群;多进程会各自触发,生产需分布式锁或外部调度 |
| 宕机恢复 | 重启后靠 initScheduleJobs() 从 DB 重新注册 |
启动
src/index.ts 在 Application.start() 之后调用:
ts
void initScheduleJobs().catch((e) => {
console.error('[Schedule] 初始化失败:', e)
})会加载 status = 1 的任务并 cron.schedule。
任务 Bean
放在 src/business/schedule/tasks,用 @Component('beanName') 注册,实现 execute() 或 run():
ts
import { Component } from '@/core/Service'
@Component('sysLogCleanTask')
export class SysLogCleanTask {
execute() {
console.log('[sysLogCleanTask] 清理过期日志')
}
}内置示例:sysLogCleanTask、userCacheSyncTask、sysLogTask(当前为日志打点)。
CRUD / 启停 / 立即执行会同步调用 ScheduleManager.scheduleJob / unschedule / runOnce,见 Schedule API。
Cron 示例
支持 5 段或 6 段(含秒);若表达式里含 ?,会自动替换为 *:
0 0 2 * * * → 每天 2 点
0 */30 * * * * → 每 30 分钟
*/3 * * * * * → 每 3 秒(生产勿开高频)