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

时间:2013-12-06 06:36:39

标签: java cron quartz-scheduler

我想现在每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点开火,差距只有4分钟。

  • 如何使用cron表达式实现我想要的目标?
  • 任何人都能解释一下石英cron的这种行为吗?

提前致谢。

6 个答案:

答案 0 :(得分:8)

你的cron表达式应该是

0 0/14 * 1/1 * ? *

一个很棒的网站,可以在您遇到疑问时创建您的cron表达式:http://www.cronmaker.com/

它将帮助您构建cron表达式并向您显示您的cron的下一个刻录日期。

更多参考资料:http://www.nncron.ru/help/EN/working/cron-format.htm

答案 1 :(得分:3)

那么,0/14给你的消防时间分别为00,14,28,42,56和每小时00分钟。所以最后一个时间间隔不是14分钟而是4分钟。多数民众赞成如何运作。只有当你的间隔的余数为60的情况为零时,你才能得到等于几分钟的间隔。

答案 2 :(得分:1)

你弄错了。 0/14表示从0之后的14min开始,每小时都会触发一次。这就是它在12.00

开火的原因

答案 3 :(得分:1)

" 0 0/14 * * *?"表示从每个14分钟的时间间隔开始的下一个开火时间,就像你说的那样。

第一个' 0'指在时钟0(或12)处的SECOND;同样适用于第二个' 0'这意味着MINUTE在时钟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;
}

下一个开火时间是从您传入此方法的分钟间隔的当前时间开始的下一秒。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

使用此cron表达式。

0 0/14 * * *?