Задача по расписанию в Nest
Интервал подходит для частых коротких шагов, но сверка с полночью или ровная минута на часах требуют другого подхода. Считать время вручную внутри метода легко сбить при смене нагрузки или паузе процесса.
Для календарного расписания
метод помечают @Cron.
В декоратор передают строку
в формате cron или готовую
константу из CronExpression.
Константа раз в минуту срабатывает
реже, чем посекундный интервал,
и удобна для регулярной сверки
списка без лишней нагрузки.
Покажем на примере постов:
import { Injectable } from '@nestjs/common';
import { Cron, CronExpression } from '@nestjs/schedule';
@Injectable()
export class PostTasksService {
@Cron(CronExpression.EVERY_MINUTE)
handleCron() {
console.log('Post list minute');
}
}
Провайдер и ScheduleModule.forRoot
в корневом модуле остаются
как при задаче по интервалу:
import { Module } from '@nestjs/common';
import { ScheduleModule } from '@nestjs/schedule';
import { PostTasksService } from './post.tasks.service.js';
@Module({
imports: [ScheduleModule.forRoot()],
providers: [PostTasksService],
})
export class AppModule {}
В WorkerTasksService
добавьте минутный фоновый шаг
для списка работников и
подключите класс с планировщиком
в корневом модуле.