【问题标题】:Quartz cron expression to run job with interval of minutesQuartz cron 表达式以分钟间隔运行作业
【发布时间】:2018-06-04 05:37:14
【问题描述】:

我想知道是否可以写一个有几个条件的cron表达式:

  1. 作业应该以给定的时间间隔(以分钟为单位)运行。例如,间隔 42 分钟,触发时间将是 10:0010:4211:2412:06 等。
  2. 如果当前分钟不以0 结束(例如10:28,10:29),则cron 首次触发时间应为10:30。所以这意味着第一次点火时间应该有“轮”分钟。

希望您了解这些条件。可以用quartz cron来描述吗?

【问题讨论】:

    标签: cron quartz-scheduler


    【解决方案1】:

    您可以在 Quartz.net 3.0 中使用如下所述的作业触发器:

     var jobTrigger = TriggerBuilder.Create()
                    .StartNow()
                    .WithSimpleSchedule(s => s
                        .WithIntervalInMinutes(42)
                        .RepeatForever())
                    .Build();
    

    而且你可以在第一轮重启应用,所以它只会在第一次同时触发。

    【讨论】:

      【解决方案2】:

      我通常使用http://www.cronmaker.com/ 来生成我的 cron 表达式。如果您尝试每 42 分钟选项,您将得到以下表达式:“0 0/42 * 1/1 * ? *”。至于“回合”分钟的事情,您可以在构建触发器时尝试一下:

      ITrigger trigger = TriggerBuilder.Create()
                  .WithIdentity(JobTrigger, JobGroup)
                  .WithCronSchedule(CroneExpression)
                  .StartAt(new DateTimeOffset(DateTime.Now, 
                   TimeSpan.FromMinutes(DateTime.Now.Minute % 10)))
                  .Build();
      

      【讨论】:

      • 感谢您的评论,但您的 cron 不符合条件(在 cronmaker 中检查)
      • @jahra 怎么来的?此 cron 每 42 分钟运行一次,在构建触发器时,您从最近的“回合”分钟开始它
      • 根据cronmaker,它将在7:42 8:00 8:42 上触发,这在条件下是不可接受的。
      【解决方案3】:
      1. 这是不可能的,请参阅解释和类似问题:Quartz.net - Repeat on day n, of every m months?

      2. Cron 表达式也不可能。为此,您需要应用一些复杂的逻辑,使用一些在评估器中不存在的运算符。你为什么需要这个?您想结合这 2 个要求并创建单一的复杂模式吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-08
        • 2011-03-27
        • 2012-10-23
        • 1970-01-01
        • 2012-11-02
        • 1970-01-01
        • 2021-09-03
        • 2015-05-27
        相关资源
        最近更新 更多