Skip to content

定时任务

使用 node-cron,封装在 src/core/schedule/ScheduleManager.ts

能力与限制

说明
调度引擎node-cron(进程内)
配置来源sys_schedule + 启动时加载启用任务
多实例不内置集群;多进程会各自触发,生产需分布式锁或外部调度
宕机恢复重启后靠 initScheduleJobs() 从 DB 重新注册

启动

src/index.tsApplication.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] 清理过期日志')
  }
}

内置示例:sysLogCleanTaskuserCacheSyncTasksysLogTask(当前为日志打点)。

CRUD / 启停 / 立即执行会同步调用 ScheduleManager.scheduleJob / unschedule / runOnce,见 Schedule API

Cron 示例

支持 5 段或 6 段(含秒);若表达式里含 ?,会自动替换为 *

0 0 2 * * *      → 每天 2 点
0 */30 * * * *   → 每 30 分钟
*/3 * * * * *    → 每 3 秒(生产勿开高频)

相关章节

基于 VitePress 构建