Spring Batch定时表达式:每3小时运行一次。

27

我希望我的Spring Batch作业每3小时运行一次。

我使用了表达式* * */3 * * ?,这会在可被3整除的小时开始作业。例如,假设服务器在下午2点启动,作业将仅在下午3点开始执行,目前看起来没有问题,但是该作业会不断地每秒钟启动!这是因为我在第一个位置使用了*吗?

我尝试了0 0 */3 * * ?,但是出现了错误。有什么更好的方法可以实现这个目标吗?

2个回答

47

格式为

秒, 分钟, 小时, 天, 月份, 星期几

因此正确的cron表达式应为

0 0 */3 * * *

如果那样做不起作用,你具体收到了什么错误消息?


20
0/3 表示在每小时的第 0 分钟运行任务,而 */3 则表示每隔 3 分钟运行一次任务。 - Ammad
2
0/3和*/3有什么区别? - shareef
2
  • 表示该字段的所有可能值。? 表示您不关心该值。当您有两个可能相互矛盾的字段时,可以使用它。
- Oleksandr Loushkin
所以我认为 */3 表示自服务器启动以来每 3 小时运行一次,而 0/3 则表示在小时数可被 3 整除的情况下每 3 小时运行一次;因此是在凌晨 3 点、早上 6 点、9 点、中午 12 点、下午 3 点、6 点、9 点和晚上 12 点运行。如果有人能够确认一下就太好了。 - andrewps
5
我刚刚运行了一个任务,使用了“0 0 0/6 * * ”参数,意味着每六个小时尝试一次。它似乎在服务器启动后的第六个整点工作。我在下午5:50重启了它,然后任务在晚上11点、早上5点和早上11点运行。我猜测在这种情况下,“/6”会在服务器启动后每隔六个小时准确地运行,例如晚上11:50、早上5:50等等。所以两者都可行,但“0/6”是每六个整点,“*/6”是每隔六个小时准确地运行。 - andrewps

18

使脚本每3小时运行的正确语法如下。

0 0 0/3 * * ?

14
Spring的cron job需要6位数字而不是5位。 - Anto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接