【发布时间】:2022-12-21 22:19:19
【问题描述】:
我想在我的 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 {}
请帮忙。谢谢你。
【问题讨论】:
-
您是否有将此 cron 表达式添加到两个
providers数组的类? -
不,我将类(StoreService)添加到 ``` providers ``` 数组的唯一地方是它自己的模块。在此处添加参考:
@Module({ imports: [ TypeOrmModule.forFeature([ User, ClusterManager, Store, Order, Biller, ReturnOrder ]), JwtModule.registerAsync({ imports: [ConfigModule], useFactory: async () => ({ secret: process.env.TOKEN_KEY, }), inject: [ConfigService], }), ], controllers: [StoreController], providers: [ StoreService, ], }) export class StoreModule {} -
上面的代码很难阅读,不知道如何在此处添加它。 @杰麦克唐尼尔
-
类中的 cron 可以执行两次的任何其他方式吗?因为当我使用 10 秒 (*/10 * * * * *) 这样的间隔时,它只会被调用一次。这是一个很难破解的问题。 @杰麦克唐尼尔
-
我可以看到它被两次添加到注册表的唯一原因是被实例化了两次,但是如果使用一个间隔它只发生一次那么我不确定。重现此方法的方法将非常有帮助
标签: cron nestjs scheduled-tasks