Spring-启动@Scheduled Cron 表达式以在两个任务之间进行轻微延迟?

Spring-Boot @Scheduled Cron expressions to make slight delay between two tasks?

我正在使用 Spring-Boot @Scheduled Cron 来缓存从持久存储中检索到的数据。

我有两个不同的任务,

任务 1 将 运行 每 15 分钟。我已经将 cron 设置为

@Scheduled(cron = "0 0/15 * * * *")

所以频率是

12:00:00
12:15:00
12:30:00

现在我想 运行 Task2 比 Task1

早 10 秒

11:59:50
12:14:50
12:29:50

我正在尝试这个表达式

@Scheduled(cron = "50 0/14 * * * *")

但它每隔 14 分钟触发一次。

任何人都可以建议我解决它的解决方案吗?

我建议您使用 fixedRatefixedDelay 而不是 cron 表达式。您的要求不是很复杂,因此没有必要使用 cron.

  • Fixed Delay - 专门控制上次执行结束时的下一次执行时间。

  • 固定速率 - 使 Spring 运行 定期执行任务,即使最后一次调用可能仍然是 运行ning - 不等待 上次执行完成。

使用示例:

@Scheduled(fixedDelay = 900000) // 15 minutes
public void taskOne() {
   ...
}

@Scheduled(fixedDelay = 890000) // 14 minutes 50 seconds
public void taskTwo() {
   ...
}

试试:

@Scheduled(cron = "50 59/15 * * * *")

解释:

50 59/15 * * * * = at 50 seconds, every hour at 59 minute, every 15 minutes
50 59/15 * * * * = starting at 11:59:50 for every 15 minutes.

您的问题是 */X 表示 "every X"。所以 0/14 表示每 14 分钟一次。

More you can read in the docs:

这将 运行 你的任务 2 比任务 1 早 10 秒:

@Scheduled(cron = "50 14/15 * * * *")

它将 运行 例如 11:59:50、12:14:50、12:29:50、12:44:50、12:59:50...