我想在我的 NestJs 项目中执行这个 cron 函数:
@Cron('59 23 * * *')
async CashPendingCRON(){
let stores = await this.storeRepository.find();
for (let store of stores){
await this.connection
.createQueryBuilder()
.insert()
.into(CashPending)
.values([
{ cashPending: store.cashPending, store: store }
])
.execute()
}
如您所见,玉米作业应该在每天晚上 11:59 执行。但它被执行了两次,并且条目被记录在数据库中两次。当我使用 10 秒这样的间隔 (*/10 * * * * *) 时,它只会被调用一次。
如果有修复或我做错了什么,请告诉我。
这是我在 app.module.ts 中添加 ScheduleModule 的方法
@Module({
imports: [
ScheduleModule.forRoot(),
ConfigModule.forRoot({
load: [appConfig, devConfig, stagConfig],
ignoreEnvFile: true,
isGlobal: true,
}),
TypeOrmModule.forRoot(
configService.getTypeOrmConfig(),
),
TypeOrmModule.forFeature([
User,
Vendor,
Store,
Product,
Category,
Brand,
AppVersion
]),
JwtModule.registerAsync({
imports: [ConfigModule],
useFactory: async () => ({
secret: process.env.TOKEN_KEY,
}),
inject: [ConfigService],
}),
UserModule,
UserClusterModule,
StoreModule,
OperationManagerModule,
UserBrandModule,
UserCatalogueModule,
UserPropertyModule,
FileModule,
BrandModule,
CategoryModule,
ProductsModule,
WarehouseModule,
SubCategoryModule,
StoreStocksModule,
WarehouseStockModule,
RtvStocksModule,
VendorModule,
CustomerModule,
W2sModule,
S2sModule,
W2wModule,
BillerModule,
WarehouseManagerModule,
AuthModule,
OrderModule,
GRNModule,
SKUTimelinesModule,
BannerModule,
OrderReturnModule,
UtilModule,
POModule,
AppVersion,
S2wModule,
CashOutModule
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
请帮忙。谢谢。
我遇到了这个问题,并通知 name 属性为我解决了这个问题:
@Cron(CronExpression.EVERY_10_SECONDS, { name: 'nameOfJob'})
我遇到了同样的问题,问题是我在导入两次的模块中使用
imports: [ScheduleModule.forRoot()]
(由其他两个模块导入)。我通过创建一个不被任何其他模块导入的新模块并在其中添加ScheduleModule.forRoot()
来解决这个问题。
调度程序.module.ts
@Module({
providers: [SchedulerService],
imports: [ScheduleModule.forRoot()],
})
export class SchedulerModule {}
调度程序.service.ts
import { Injectable } from '@nestjs/common';
import { Cron, CronExpression } from '@nestjs/schedule';
@Injectable()
export class SchedulerService {
@Cron(CronExpression.EVERY_10_SECONDS)
handleExpiration() {
console.log(new Date());
}
}
控制台输出:
2022-12-21T14:04:00.005Z
2022-12-21T14:04:10.004Z
2022-12-21T14:04:20.009Z
2022-12-21T14:04:30.004Z
2022-12-21T14:04:40.011Z
...