首页 文章

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

提问于
浏览
1

我想现在每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 回答

  • 3

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

  • 1

    你的cron表达式应该是这样的

    0 0/14 * 1/1 * ? *
    

    当您有疑问时,这是一个很棒的网站来创建您的cron表达式:http://www.cronmaker.com/

    它将帮助您构建您的cron表达式并向您显示您的cron的下一个触发日期时间 .

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

  • 0

    你弄错了 . 0/14 表示它将在 14min 之后从 0 开始每小时触发一次 . 这就是它在 12.00 射击的原因

  • 1

    “0 0/14 * * *?”指的是每14分钟间隔从时钟开始的下一个开火时间,就像你说的那样 .

    第一个'0'表示在时钟0(或12)处的第二个;对于第二个'0'也是如此,这意味着MINUTE在时钟0(或12); '/ 14'表示间隔为14分钟 .

    So get the SECOND and MINUTE from current time 并将它们与间隔连接成一个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;
    }
    

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

  • 8

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

  • 0

    使用此cron表达式 .

    0 0/14 * * *?

相关问题