目的: 能写出一个正确的Cron
cron可以是6位或7位 按顺序是 秒 分 时 日 月 周 (年),以空格隔开
java的 @Scheduled 只支持6位, quartz可支持7位
秒,分,时,不赘述
日: 即第4位, 指当月的第几天,不能为0
月: 即第5位,指当年的第几个月,不能为0
周: 即第6位,这里不是指第几周, 而是一周的第几天,其实也算日,只是为了区分. (不确定,有说0就是周日,但是我在quartz测了0会报错)
这里就出现了一个矛盾点: 日和周, 假设都写 * ,会报错.
(个人理解: 我希望这一天是一个月里的第几天,或一周里的第几天,只能二选一,要是都选了,比较拗口, 所以其中一个位置必须要用?来代替 ,表示我不关注这个栏位 )
总结: 第4位或第6位必须出现一个?号
如果想写 0 * * * * *这种, , 即0 * * ? * * 或 0 * * * * ?
例子:
0 * * * * ? 每分钟0秒的时候执行一次
* 0 * * * ? 每小时0分钟的时候执行60次=每小时0分钟的时候每秒一次
, 比如10:00:00的时候每秒一次一直执行到10:00:59
, 然后下一次等11:00:00的时候再执行
* * 0 * * ? 每天0点执行一整个小时,这个小时内每秒一次
* * * 1 * ? 每月一号执行一整天
* * * * 1 ? 每年一月份执行整个月
* * * ? * 1 每周一执行一整天 (周的用法可能有误,此处是参考网上所说,望自己测试,比如周四实际是5之类的)
总结易错点:很多时候想要的是例如每天8点一次, 0 0 8 * * ?
实际写成 * * 8 * * ? 问题就大了
以上仅限初步写出一个能用的cron, 如用法有误,望指出,谢谢.