nest 中的定时任务
准备工作
- 新建个
nest项目
sh
nest new schedule-task -p pnpm- 然后安装相关的包
sh
pnpm add @nestjs/schedule- 在
AppModule里引入ScheduleModule之后,就可以用它提供的方法在nest里面创建定时任务了。

创建定时任务
- 先新建一个
service
sh
nest g service task --flat --no-spec@Cron
- 通过
@Cron声明一个定时任务,可以实现写cron表达式的效果,cron表达式的语法就不细写了。
ts
import { Injectable } from '@nestjs/common';
import { Cron, CronExpression } from '@nestjs/schedule';
@Injectable()
export class TaskService {
@Cron(CronExpression.EVERY_5_SECONDS)
handleCron() {
console.log('Cron task execute');
}
}EVERY_5_SECONDS代表的是每 5 秒执行一次定时任务把服务跑起来后观察控制台输出

- 可以看到,任务每 5s 都会执行一次。
@Interval
除了
@Cron之外,你还可以用@Interval指定任务的执行间隔Interval(name: string, timeout: number)name代表任务名timeout代表轮询时间间隔 单位是毫秒
ts
import { Injectable } from '@nestjs/common';
import { Cron, CronExpression, Interval } from '@nestjs/schedule';
@Injectable()
export class TaskService {
@Cron(CronExpression.EVERY_5_SECONDS)
handleCron() {
console.log('Cron task execute');
}
@Interval('task', 1000)
handleInterval() {
console.log('Interval task execute');
}
}
@Timeout
- 用 @Timeout 可以指定多长时间后执行这次定时任务,注意 只会执行一次
ts
import { Injectable } from '@nestjs/common';
import { Cron, CronExpression, Interval, Timeout } from '@nestjs/schedule';
@Injectable()
export class TaskService {
@Cron(CronExpression.EVERY_5_SECONDS)
handleCron() {
console.log('Cron task execute');
}
@Interval('interval-task', 1000)
handleInterval() {
console.log('Interval task execute');
}
@Timeout('timeout-task', 3000)
handleTimeout() {
console.log('Timeout task execute');
}
}
russ