要在不启动HTTP服务器的情况下运行NestJS调度器,可以使用@nestjs/schedule
模块提供的Cron
装饰器和CronExpression
类。
以下是一个示例代码,演示了如何在NestJS应用中使用@nestjs/schedule
模块来创建一个调度器,并在不启动HTTP服务器的情况下运行该调度器。
首先,安装@nestjs/schedule
模块:
npm install --save @nestjs/schedule
然后,在你的模块文件中导入所需的模块和类:
import { Module } from '@nestjs/common';
import { ScheduleModule } from '@nestjs/schedule';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { TasksService } from './tasks.service';
@Module({
imports: [
ScheduleModule.forRoot(),
],
controllers: [AppController],
providers: [AppService, TasksService],
})
export class AppModule {}
接下来,创建一个调度器类,例如TasksService
:
import { Injectable } from '@nestjs/common';
import { Cron } from '@nestjs/schedule';
@Injectable()
export class TasksService {
@Cron('0 * * * * *') // 使用Cron装饰器定义调度器的运行时间
handleCron() {
// 在这里编写调度器运行时要执行的代码
console.log('调度器正在运行');
}
}
最后,创建一个应用入口文件(通常是main.ts
),并在其中启动NestJS应用:
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.createApplicationContext(AppModule); // 使用createApplicationContext方法创建应用上下文
await app.init(); // 初始化应用上下文,但不启动HTTP服务器
const tasksService = app.get(TasksService); // 获取TasksService实例
tasksService.handleCron(); // 执行调度器
}
bootstrap();
现在,你可以运行应用程序,它将在不启动HTTP服务器的情况下运行NestJS调度器。
注意:要确保调度器类(例如TasksService
)已经在模块文件(例如AppModule
)的providers
数组中进行了提供。
上一篇:不启动挂起函数的全局标志?