繁体   English   中英

石英cron表达式从现在开始每14分钟运行一次

[英]Quartz cron expression to run job at every 14 minutes from now

我现在想每隔14分钟办一次工作。

例如,如果我在上午11:04安排工作,使用0 0/14 * * * ? cron表达式。 那么预期的起火时间应该是11:18,11:32,11:46等等。 但会在11:00,11:14:11,28:11:42,11:56,12:00触发 以及为什么它在11:56之后的12:00时触发,所以仅差4分钟。

  • 如何使用cron表达式实现我想要的?
  • 谁能向我解释石英石英的这种行为?

提前致谢。

您的cron表情应该看起来像

0 0/14 * 1/1 * ? *

一个有疑问的网站,可用来创建您的cron表达式: http : //www.cronmaker.com/

它会帮助您建立cron表达式,并向您显示cron的下一个触发日期时间。

有关更多参考: http : //www.nncron.ru/help/ZH/working/cron-format.htm

好吧,0/14给您发射时间分别为00、14、28、42、56,以及每小时的00分钟。 因此,最后间隔不是14分钟而是4分钟。 那就是cron的工作方式。 仅当间隔除以60的余数为零时,才能获得以分钟为单位的均等间隔。

你弄错了。 0/14表示它将在14min后从0开始每小时触发一次。 这就是为什么它在12.00开火

“ 0 0/14 * * *?” 表示从时钟开始每隔14分钟的下一次触发时间,如您所说。

第一个“ 0”表示第二个时钟为0(或12)。 与第二个“ 0”相同,表示时钟的分钟数为0(或12); “ / 14”表示间隔为14分钟。

因此,从当前时间获取SECOND和MINUTE并将它们与时间间隔连接成cron表达式,然后将其触发。 以下是Java的示例:

public static String getCronExpressionFromNowWithSchedule(int minuteInterval) throws Exception {
    String cronExpression = "";
    Calendar now = Calendar.getInstance();
    int year = now.get(Calendar.YEAR);
    int month = now.get(Calendar.MONTH); // Note: zero based!
    int day = now.get(Calendar.DAY_OF_MONTH);
    int hour = now.get(Calendar.HOUR_OF_DAY);
    int minute = now.get(Calendar.MINUTE);
    int second = now.get(Calendar.SECOND);
    int millis = now.get(Calendar.MILLISECOND);

    if (minuteInterval<=0) cronExpression = (second+1)+" * * * * ?";
    else cronExpression = (second+1)+" "+minute+"/"+minuteInterval+" * * * ?";

    System.out.println(cronExpression);
    return cronExpression;
}

在您传入此方法的“分钟”间隔中,下一个触发时间是从当前时间开始的下一秒。

您应该将cron表达式更改为0 0/14 * 1/1 * ? * 0 0/14 * 1/1 * ? *

使用此cron表达式。

0 0/14 * * *?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM