如何使用 Quartz.Net 开始计划作业?
Posted
技术标签:
【中文标题】如何使用 Quartz.Net 开始计划作业?【英文标题】:How to start a scheduled job using Quartz.Net? 【发布时间】: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 分钟)进行了测试,结果有效......
【参考方案1】:
cron 表达式20/20 0 0 ? * * *
的意思是“每 20 秒,在前 20 秒之后,在第一个小时的第一分钟。
所以基本上,00:00:20
和 00:00:40
,即午夜过后 20 秒和午夜过后 40 秒。
检查这是否是您想要的 cron。其他一切看起来都正确。
【讨论】:
以上是关于如何使用 Quartz.Net 开始计划作业?的主要内容,如果未能解决你的问题,请参考以下文章
Quartz.Net 如何创建每天不增加 1 分钟的日程安排