*和?之间的区别在Spring @Scheduled(cron =" .....")

时间:2015-05-20 05:35:39

标签: java spring cron scheduled-tasks scheduler

我一直在查看Spring Boot示例以安排任务(https://spring.io/guides/gs/scheduling-tasks/)并阅读一些文档(https://javahunter.wordpress.com/2011/05/05/cronscheduler-in-spring/),我看到*和?几乎可互换使用。

例如,行

@Scheduled(cron = "0 15 10 ? * *")

@Scheduled(cron = "0 15 10 * * ?")

做同样的事情。那么*和?

之间的区别是什么?

2 个答案:

答案 0 :(得分:26)

教程已过时。符号?表示完全*相同。从Spring 3.1.2.RELEASE开始,调用层次结构为:

构造函数CronTrigger(String)调用构造函数CronSequenceGenerator(String),调用parse(String)调用setDays(BitSet bits, String field, int max)。它的实施很明确:

private void setDays(BitSet bits, String field, int max) {
    if (field.contains("?")) {
        field = "*";
    }
    setNumberHits(bits, field, 0, max);
}

所以,如果是?,那么*

答案 1 :(得分:4)

asterix代表所有可能的值。问号应该用于非特定值

  

*(“所有值”) - 用于选择字段中的所有值。例如,分钟字段中的“”表示“每分钟”。

     

? (“没有特定值”) - 当您需要指定某些内容时非常有用   允许角色的两个字段之一,但不是   其他。例如,如果我希望我的触发器在某一天触发   这个月(比如说,10日),但不关心一周的哪一天   碰巧是,我会在日期字段中加上“10”,并且“?”在   星期几字段。请参阅以下示例以获得说明。

tutorial

复制