本地任务
和 bull 组件不同,cron 组件提供的是本地任务能力,即在每台机器的每个进程都会执行。如需不同机器或者不同进程之间只执行一次任务,请使用 bull 组件 。
相关信息:
| 描述 | |
|---|---|
| 可用于标准项目 | ✅ |
| 可用于 Serverless | ❌ |
| 可用于一体化 | ✅ |
| 包含独立主框架 | ✅ |
| 包含独立日志 | ✅ |
安装组件
$ npm i @midwayjs/cron@3 --save
或者在 package.json 中增加如下依赖后,重新安装。
{
"dependencies": {
"@midwayjs/cron": "^3.0.0",
// ...
},
}
使用组件
将组件配置到代码中。
import { Configuration } from '@midwayjs/core';
import * as cron from '@midwayjs/cron';
@Configuration({
imports: [
// ...
cron
]
})
export class MainConfiguration {
//...
}
编写任务处理类
使用 @Job 装饰器装饰一个类,用于快速定义一个任务处理器。
比如,在 src/job 目录中创建一个 sync.job.ts,用于某些数据同步任务,代码如下:
// src/job/sync.job.ts
import { Job, IJob } from '@midwayjs/cron';
import { FORMAT } from '@midwayjs/core';
@Job({
cronTime: FORMAT.CRONTAB.EVERY_PER_30_MINUTE,
start: true,
})
export class DataSyncCheckerJob implements IJob {
async onTick() {
// ...
}
}
@Job 装饰器用于修饰一个任务类,在初始化时,框架会自动将其转变为一个任务。
任务类需要实现 IJob 接口,实现 onTick 方法,每当任务触发时,会自动调用 onTick 方法。
此外,还有一个可选的 onComplete 方法,用于在 onTick 完成后执行。
@Job({
cronTime: FORMAT.CRONTAB.EVERY_PER_30_MINUTE,
start: true,
})
export class DataSyncCheckerJob implements IJob {
async onTick() {
// ...
}
async onComplete() {
// 记录一些数据等等,用处不是很大
}
}
@Job 装饰器的常用参数如下:
| 参数 | 类型 | 描述 |
|---|---|---|
| cronTime | string | crontab 表达式 |
| start | boolean | 是否自动启动任务 |
| runOnInit | boolean | 是否在初始化就执行一次 |
更多参数,请参考 Cron。