Skip to content

定时任务

当前 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/schedule
ts
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 服务。
  • 多实例部署时注意分布式锁,避免同一任务被多个实例同时执行。

下一步:

基于 MIT 许可发布 · 如需部署协助或二开定制,请查看 支持与合作