我对Java很陌生。作为我的第一个项目,我将使用cron作业调度器。我想澄清一下日程安排。我有一个每小时运行一次的代码。
CronTrigger ct = new CronTrigger("cronTrigger", "group2", "0 1/0 * * * ?");
我看过有关日程安排的文件,但我搞不懂
在一份文件中,我读到如下
("0 0 * * * ?")
- 第1个0表示秒
- 第二个表示分钟
- 第3小时
- 第四个月的哪一天
- 第五个是哪个月。
在一些文件中,我读到1st表示分钟,2nd - hour等。
有没有人可以解释一下(0 1/0 * * *)?)以及它的含义(1/0)?
我想每六个小时跑一次作业。
如果我给予这样的(0 */6 * * * ?
)是否它将运行在每六个小时?
3条答案
按热度按时间kx5bkwkv1#
如果你登录crontab.guru,这两个几乎是等价的:
这是因为
X/Y
意味着:从X
开始,每个Y
。也就是说,所有X + Yn。所以如果你说*/2
,它会每2小时做一次。在这种情况下:
1/0
表示“从1开始,每小时”,因此它匹配1到23,而*
匹配0到23。根据您的问题,
*/6
每6小时匹配一次,因此它将精确地在第0、6、12和18小时运行。关于第6个参数
?
是做什么的问题,I read:我相信这是由CronExpression类处理的,它有六个常量:分钟,小时,天,月,星期日,年。Cron使用分钟、小时、天、月、星期日。在yearly()方法中添加的年份似乎是额外的 * 的原因。
所以我们没有使用通用的语法
Java你有
最后一个参数也可以有一个值,但在您的示例中,它指定
?
。至于我在www.example.com上读到的内容crontab.guru,它的意思是:**?**空白(非标准)
因此,我会使用5个常用参数正常调度它,然后在最后添加
?
,以便它在所有年份都运行。wn9m85ua2#
一个小错误溜进了公认的答案:Spring six fields cron expressions中的extra field是“second"的first field。
请注意,每5个字段cron表达式示例或由互联网上的cron计算器(如crontab.guru)计算的Spring都是错误的。
表达式:
0 * * * *
(5个字段)将使Spring抛出IllegalArgumentException("Cron expression must consist of 6 fields")
。5字段cron表达式必须通过添加前导'*'或'0'转换为Spring的6字段格式。参见Spring cron vs normal cron?
nhjlsmyf3#
只是在这个疑问的确切点上加上了Spring的文档来说明。scheduling-cron-expression
所有Spring cron表达式必须符合相同的格式,无论您是在@Scheduled annotations,task:scheduled-tasks元素中使用它们,还是在其他地方使用它们。一个格式良好的cron表达式,如******,由六个空格分隔的时间和日期字段组成,每个字段都有自己的有效值范围: