nestjs任务调度的使用

6 篇文章 0 订阅
4 篇文章 0 订阅

前端出身的我经常开会的时候会听到其他后端在说定时任务,现在写node也用到了任务调度。
这个任务调度并不是因为node是js就草率的认为是settimeout或setinterval这样的。node的任务调度会开启一个node的子进程,在子进程中进行任务调度。当然nestjs已经帮我们封装好了相关的功能。
安装

 yarn add @nestjs/schedule

schedule.service.ts
任务调度设置时间需要用到Cron装饰器并且有两种设置间隔的方式
第一种为预设的CronExpression来定义间隔,下方的例子就是每10个小时执行一次。
第二种'45 * * * * *'意思是每分钟的底45秒执行一次。具体的可以看下nest官网Task Scheduling | NestJS 中文文档 | NestJS 中文网

import { Injectable, Logger } from '@nestjs/common';
import { Cron } from '@nestjs/schedule';
import loopTask from 'src/common/loopTask';

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

  // @Cron('45 * * * * *')
  @Cron(CronExpression.EVERY_10_HOURS)
  handleCron() {
    loopTask()
    this.logger.debug('Called when the current second is 45');
  }
}

作为service就要在controller中引用
只需要在constructor引入就行

import {Controller} from '@nestjs/common';
import { ScheduleService } from './schedule/schedule.service';

@Controller()
export class AppController {
  constructor(
    private scheduleService: ScheduleService,
  ) {
    // this.scheduleService.handleCron() // 无需调用服务器会自己启动定时器
  }
}

 main.ts
作为service需要在module中引入

import { Module, MiddlewareConsumer } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ScheduleModule } from '@nestjs/schedule';
import { ScheduleService } from './schedule/schedule.service';

@Module({
  imports: [
    ScheduleModule.forRoot(),
  ],
  controllers: [AppController],
  providers: [AppService, ScheduleService],
})
export class AppModule {}

一个简单的任务调度的例子就完成了。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值