java.lang.RuntimeException:CronExpression';4 27 11 ? 8.2014年&x27年;无效,,

java.lang.RuntimeException:CronExpression';4 27 11 ? 8.2014年&x27年;无效,,,java,quartz-scheduler,cronexpression,Java,Quartz Scheduler,Cronexpression,将其作为无效的CronExpression获取,无法找出原因 参考 这就是我生成Cron表达式的方式: public class sample { /** * @param args */ public static void main(String[] args) { Date date = new Date(); String formatted_date = generateCronExpression(Integer.

将其作为无效的CronExpression获取,无法找出原因

参考

这就是我生成Cron表达式的方式:

public class sample {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Date date = new Date();
        String formatted_date = generateCronExpression(Integer.toString(date.getSeconds()),Integer.toString(date.getMinutes()),
                Integer.toString(date.getHours()), "?", Integer.toString(date.getMonth()), "?", Integer.toString(date.getYear()+1900));

    }
    private static String generateCronExpression(final  String seconds,final String minutes, final String hours, final String dayOfMonth, final String month, final String dayOfWeek, final String year) {
        return String.format("%1$s %2$s %3$s %4$s %5$s %6$s %7$s", seconds,minutes, hours, dayOfMonth, month, dayOfWeek, year);
    }
}

cron表达式中的“?”意味着允许月日和周日互不干扰(例如,您可以指定一个cron在任何星期五触发,而不管该月的哪一天,也不管它是哪一天)。如果将它们都指定为“?”,则没有任何日期规范,这是非法的

当前日期的cron表达式将使用月份中的日期,而忽略星期中的日期。例如,对于今天,2014年9月15日,您需要指定
4271159?2014年

这可以通过从java
Date
对象提取当前日期来生成:

public static void main(String[] args) {
    Date date = new Date();
    String formatted_date = generateCronExpression
                             (Integer.toString(date.getSeconds()),
                              Integer.toString(date.getMinutes()),
                              Integer.toString(date.getHours()),
                              Integer.toString(date.getDate()),
                              Integer.toString(date.getMonth() + 1), // see Note #2
                              "?",
                              Integer.toString(date.getYear() + 1900));
}
注:

  • Date.getDate()
    Date.getHours()
    等都不推荐使用-您应该改用
    Calendar.get
    。我从OP中保留了当前的代码,以使解决方案清晰明了,而不是添加额外细节的混乱
  • Date.getMonth()
    (以及新推荐的方法,
    Calendar.get(Calendar.MONTH)
    )返回一个以零为基础的月份表示法(例如,一月是0,二月是1,等等),而cron表达式是以一为基础的(例如,一月是1,二月是2,等等),因此您应该为cron表达式添加1

  • 我需要当前日期的cron表达式,因此传递?通常不支持月日和周日的年份,可能这就是原因。好的,删除了年份,那么这一个呢:CronExpression'524411?8?无效。请尝试使用
    *
    而不是
    您的意思是我每年都安排它?这可能不是我需要的,只是需要为当前日期时间安排,也就是说我希望作业立即运行谢谢!但是当我开始工作的时候,我已经能够制造触发器了。。。我得到了以下ScedulerException:根据配置的计划,给定的触发器“group1.schedulerJobTrigger”将永远不会触发。此代码创建一个触发器,设计为在创建时触发-在创建时,时间已经过去。你希望它什么时候启动?明白你的意思了,意识到秒字段一定失败了…但我希望作业从当前时间开始尽快运行,也就是说我希望“立即运行”某种功能…看起来我找到了一个替代方案..给了作业运行2秒的时间延迟..现在不给出异常..还有其他可行的选项吗?基本上就是这样。虽然如果你想立即触发某些东西,为什么要使用调度程序而不是直接调用该方法呢?我需要给出两个选项,即现在运行和以后调度..至于现在。。我以2秒的间隔运行作业,但作业似乎在一次又一次地运行!:(