定时任务
当前 youlai-nest 仓库未内置 @nestjs/schedule 等定时任务调度依赖,也未发现任务注册代码。
如果项目需要“定时清理、定时报表、定时同步”等能力,建议按部署形态选择下面方案。
推荐方案
方案一:系统 Cron / Windows 任务计划
适合简单、低频任务。将任务逻辑做成 HTTP 接口或独立脚本,由系统定时触发。
bash
# 每天凌晨 2 点调用清理接口
0 2 * * * curl -X POST http://127.0.0.1:8000/api/v1/internal/jobs/cleanup方案二:引入 @nestjs/schedule
适合希望任务跟随 NestJS 应用一起部署的场景。
bash
pnpm add @nestjs/schedulets
import { Module } from "@nestjs/common";
import { ScheduleModule } from "@nestjs/schedule";
@Module({
imports: [ScheduleModule.forRoot()],
})
export class AppModule {}ts
import { Injectable } from "@nestjs/common";
import { Cron } from "@nestjs/schedule";
@Injectable()
export class TasksService {
@Cron("0 0 2 * * *")
handleDailyJob() {
// 执行业务任务
}
}方案三:外部调度平台
适合多服务、多实例或需要可视化管理的项目,例如使用 XXL-Job、Jenkins、GitLab CI、GitHub Actions 等统一调度。
实践建议
- 任务逻辑尽量幂等,避免重复执行产生脏数据。
- 长任务建议放到队列或独立 worker,避免阻塞 API 服务。
- 多实例部署时注意分布式锁,避免同一任务被多个实例同时执行。
下一步:
