Cell - 定时任务组件
Cell 后端的 Cron 任务,基于 cron 包。
bash
npm install @celljs/schedulets
import { Autowired } from '@celljs/core';
import { Cron, CronExpression, Scheduler } from '@celljs/schedule';
@Scheduler()
export class ReportScheduler {
@Autowired(ReportService)
protected readonly reports: ReportService;
@Cron(CronExpression.EVERY_5_MINUTES)
async refresh(): Promise<void> {
await this.reports.refresh();
}
@Cron('0 30 2 * * *', { name: 'nightly', timeZone: 'Asia/Shanghai' })
nightly(): Promise<void> {
return this.reports.archive();
}
}像任何组件一样从后端 DI 模块导入该文件。
@Scheduler(cronJobOptions?, componentOption?)让该类成为一个组件,其@Cron方法是任务。它的cronJobOptions应用到该类的每个任务。@Cron(cronTime, options?):cronTime是一个可选包含秒字段的 cron 表达式('*/10 * * * * *')或Date。options是 cron 包的CronJob的选项(timeZone、utcOffset、runOnInit、...)加上name。CronExpression有常见的表达式(EVERY_SECOND、EVERY_5_MINUTES、EVERY_DAY_AT_MIDNIGHT、...)。- 任务随应用启动而启动,随应用停止而停止。任务抛出的错误被记录;任务保持其调度。
schedule.disabled: true不启动任何任务,例如在cell.test.yml中。SchedulerRegistry在运行时添加、获取和删除任务:registry.add('cleanup', { cronTime: '0 * * * *', onTick: () => ... }).start()。
任务在服务端进程内运行:只在它运行时才会运行。在无服务器 preset(fc、scf、lambda、vercel、cloudflare)上,实例由请求创建和停止,因此使用平台的定时器。