Spring批处理Cron表达式:每3小时运行一次

Posted

技术标签:

【中文标题】Spring批处理Cron表达式:每3小时运行一次【英文标题】:Spring batch Cron expression: to run every 3 hours 【发布时间】:2012-09-20 05:16:48 【问题描述】:

我希望我的春季批处理作业每 3 小时运行一次

我使用了表达式 * * */3 * * ? 这在可以被 3 整除的时间开始工作,例如假设服务器在下午 2 点启动,作业仅在下午 3 点开始执行 - 到目前为止一切顺利,但作业每秒都在开始!是因为我在第一个位置使用了*吗?

我试过0 0 */3 * * ?,但它出错了。实现这一目标的最佳方法是什么?

【问题讨论】:

【参考方案1】:

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

0 0 0/3 * * ?

【讨论】:

Spring cron 作业需要 6 位而不是 5 位【参考方案2】:

格式是

秒、分、小时、日、月、工作日

所以正确的 cron 表达式应该是

0 0 */3 * * *

如果这不起作用,您收到的确切错误消息是什么?

【讨论】:

0/3和*/3有什么区别? 0/3 和 */3 有什么区别? * 表示该字段中的每个可能值。 ?意味着你不关心价值。当您有两个可能相互矛盾的字段时使用它。 所以我认为 */3 是自服务器启动以来每 3 小时一次,而 0/3 是每 3 小时一次,其中小时可被 3 整除;所以凌晨 3 点、6 点、9 点、12 点、3 点、6 点、9 点、12 点。如果有人能确认那就太好了。 好的,我刚刚运行了一项工作:0 0 0/6 * * * 每 6 小时尝试一次,它确实有效,它似乎在服务器启动后每隔 6 小时运行一次。我在下午 5 点 50 分将其退回,工作在晚上 11 点、上午 5 点、上午 11 点运行。在这种情况下,我猜测 */6 将在服务器启动后每 6 小时运行一次,例如晚上 11:50、早上 5:50 等等。所以它们都可以工作,但 0/6 是第 6 个整小时,而 */6 正好是每 6 小时一次。

以上是关于Spring批处理Cron表达式:每3小时运行一次的主要内容,如果未能解决你的问题,请参考以下文章

cron表达式怎么实现“00:15-23:57每5分钟运行一次”?

Laravel 调度程序自定义 Cron 表达式不起作用

在四分之一小时内每 30 分钟执行一次 Cron 表达式?

如何每 2 小时运行一次 cron 作业?

spring quartz 每30分钟执行一次cronExpression表达式怎么写

Spring 定时任务 @Scheduled cron表达式