【发布时间】:2022-01-07 01:05:41
【问题描述】:
我创建了一个 .Net 5 worker 服务应用程序并安装了 Quartz.AspNetCore 包。
我想运行基于 cron 表达式的代码,例如每 5 分钟一次。我创建了一个类 MyJob 实现 Ijob 并在 DI 设置期间注册它
public static void Main(string[] args)
{
Host
.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services
.AddQuartz(quartzConfiguration =>
{
quartzConfiguration.ScheduleJob<MyJob>(jobConfiguration =>
{
jobConfiguration.WithCronSchedule("20/20 0 0 ? * * *"); // Every 20 seconds starting at second 20
});
})
.AddQuartzHostedService(quartzConfiguration => // I think this code is useful ?
{
quartzConfiguration.WaitForJobsToComplete = true;
})
.AddHostedService<Worker>();
})
.Build()
.Run();
}
但作业本身永远不会执行。调用 quartzConfiguration.AddJob<MyJob>() 时,我无法访问方法 .WithCronSchedule()。
那么如何告诉 Quartz 注册一个作业并根据 cron 表达式执行它?
【问题讨论】:
-
澄清一下,这应该在凌晨 12 点运行?没有任何例外或什么?
IJob代码永远不会被命中? -
@RowanFreeman 你介意解释一下“12am”的时间吗?我从这里freeformatter.com/cron-expression-generator-quartz.html 获取了 cron 表达式并得到了相同的 cron 字符串
-
我只是想确保 OP 实际上一直等到凌晨 12 点才能运行作业。看起来小时部分为零,等于凌晨 12 点(00:00:20 和 00:00:40)。
-
@RowanFreeman 所以你认为
20/20 0 0 ? * * *不会在 20 秒后启动,然后每 20 秒执行一次?也许生成器页面对我来说并不明显...... -
@RowanFreeman 好吧,看来 cron 表达式是错误的,我用
0 */2 * ? * *(每 2 分钟)进行了测试,结果有效......
标签: c# quartz.net