安装

npm install @nestjs/schedule

使用

import { Injectable, Logger } from '@nestjs/common';
import { Cron, Interval, Timeout } from '@nestjs/schedule';

@Injectable()
export class TasksService {
  private readonly logger = new Logger(TasksService.name);

  constructor(private readonly exampleService: ExampleService) {}

  @Cron('45 * * * * *')
  handleCron() {
    this.logger.debug('该方法将在45秒标记处每分钟运行一次');
  }

   
  @Interval(10000)
  handleInterval() {
    this.logger.debug('每 x ms执行一次');
  }

  @Timeout(5000)
  handleTimeout() {
    this.logger.debug('延迟 x ms执行一次');
  }

  @Interval(10000)
  sendEmail() {
    this.logger.debug('3');
  }
}

表达式

参考这个:cron 规范和不同实现

cron是一种规范,不同的包有不同的实现(linux spring node)

Documentation | NestJS - A progressive Node.js framework

* * * * * *
| | | | | |
| | | | | day of week
| | | | months
| | | day of month
| | hours
| minutes
seconds (optional)
@Cron(CronExpression.EVERY_30_SECONDS)
一些常用语法

分布式

分布式系统单个直行,用redis锁一下即可

可以用重复代码实现

也可以基于ts的装饰器注解实现

推荐使用: nestjs-simple-redis-lock nestjs简易分布式锁

如果使用nestjs 10以上版本报错,参考package.json overrides强制覆盖版本使用

overrides 覆盖配置