【问题标题】:How to start a scheduled job using Quartz.Net?如何使用 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&lt;MyJob&gt;() 时,我无法访问方法 .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


【解决方案1】:

cron 表达式20/20 0 0 ? * * * 的意思是“每 20 秒,在前 20 秒之后,在第一个小时的第一分钟。

所以基本上,00:00:2000:00:40,即午夜过后 20 秒和午夜过后 40 秒。

检查这是否是您想要的 cron。其他一切看起来都正确。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 2013-04-08
    • 2021-02-17
    • 1970-01-01
    相关资源
    最近更新 更多