天天看點

nest學習:定時任務

文章問題導向

nest如何開啟定時任務?

如果你都有了答案,可以忽略本文章,或去nest學習導圖尋找更多答案

定時任務場景

每天定時更新,定時發送郵件

沒有controller,因為定時任務是自動完成的

第一步:安裝

yarn add @nestjs/schedule

第二步:編寫

src -> tasks

task.module.ts

import { Module } from '@nestjs/common';
import { TasksService } from './tasks.service';

@Module({
  providers: [TasksService],
})
export class TasksModule {}
           

task.service.ts

在這裡編寫你的定時任務

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

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

  @Cron('45 * * * * *')  每隔45秒執行一次
  handleCron() {
    this.logger.debug('Called when the second is 45');
  }

  @Interval(10000)  每隔10秒執行一次
  handleInterval() {
    this.logger.debug('Called every 10 seconds');
  }

  @Timeout(5000)  5秒隻執行一次
  handleTimeout() {
    this.logger.debug('Called once after 5 seconds');
  }
}
           

自定義定時時間

* * * * * * 分别對應的意思:
第1個星:秒
第2個星:分鐘
第3個星:小時
第4個星:一個月中的第幾天
第5個星:月
第6個星:一個星期中的第幾天

如:
45 * * * * *:每隔45秒執行一次
           

第三步:挂載-使用

app.module.ts

import { TasksModule } from './tasks/task.module';
import { ScheduleModule } from '@nestjs/schedule';

imports: [
    ConfigModule.load(path.resolve(__dirname, 'config', '**/!(*.d).{ts,js}')),
    StatusMonitorModule.setUp(statusMonitorConfig),
    
    ScheduleModule.forRoot(),
    TasksModule,
  ],
           

學習更多

nest學習導圖

繼續閱讀