* 和 之间的区别 ?在春季@Scheduled(cron=“.....”)

2022-09-01 10:43:41

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

例如,该行

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

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

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


答案 1

本教程已过时。该符号的含义与符号完全相同?*

从Spring版本3.1.2.RELEASE开始,调用层次结构如下:

  1. 构造函数调用构造函数CronTrigger(String)CronSequenceGenerator(String)
  2. CronSequenceGenerator(String)调用parse(String)
  3. 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);
}

因此,如果 ,则 .?*


答案 2

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

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

?(“无特定值”) - 当您需要在允许字符但不允许另一个字符的两个字段中指定某些内容时很有用。例如,如果我希望我的触发器在一个月的某一天(比如 10 日)触发,但又不在乎一周中的哪一天,我会在月中的某一天字段中加上“10”,在星期几字段中放置“?”。有关说明,请参阅下面的示例。

教程中复制


推荐