Quartz cron表达式以间隔分钟运行作业

时间:2017-12-21 14:09:03

标签: cron quartz-scheduler

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

  1. 作业应以给定的间隔(以分钟为单位)运行。例如,间隔为42分钟,开火时间为10:0010:4211:2412:06等。
  2. 如果当前分钟未以0结束(例如10:2810:29),则cron首次开火时间应为10:30。所以这意味着第一次开火时间应该是" round"分钟。
  3. 我希望你了解这些条件。是否可以用石英cron描述它们?

3 个答案:

答案 0 :(得分:1)

您可以使用Quartz.net 3.0中描述的作业触发器:

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

您可以在第一轮时间重新启动应用程序,因此它将仅在同一时间第一次启动。

答案 1 :(得分:0)

我通常使用http://www.cronmaker.com/来生成我的cron表达式。如果您尝试每42分钟选项,您将得到以下表达式:" 0 0/42 * 1/1 *? *&#34 ;.至于" round"分钟的事情,你可以在构建触发器时尝试这个:

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

答案 2 :(得分:0)

  1. 这是不可能的,请参阅解释和类似问题:Quartz.net - Repeat on day n, of every m months?

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