繁体   English   中英

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

[英]Difference between * and ? in Spring @Scheduled(cron=“…”)

我一直在查看用于调度任务的 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 * * ?")

做完全相同的事情。 那么 * 和 之间有什么区别?

教程已经过时了。 符号? 表示与符号*完全相同

从 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);
}

那么,如果? ,然后*

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

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

? (“无特定值”) - 当您需要在允许字符的两个字段之一中指定某些内容时很有用,而另一个字段则不允许。 例如,如果我希望我的触发器在一个月的某一天(比如 10 号)触发,但不关心那一天是一周中的哪一天,我会将“10”放在当天-month 字段和“?” 在星期字段中。 请参阅下面的示例以进行说明。

复制自教程

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM