我一直在查看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 * * ?")
做同样的事情。那么*和?
之间的区别是什么?答案 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”,并且“?”在 星期几字段。请参阅以下示例以获得说明。