【问题标题】:Running scheduled tasks in multiple server instances at same time in spring boot在 Spring Boot 中同时在多个服务器实例中运行计划任务
【发布时间】:2026-01-18 15:05:03
【问题描述】:

我们有一个 spring boot 应用程序和计划任务。

我们希望将我们的应用程序部署在多个服务器上,因此需要多个应用程序实例。

如何配置spring在多个实例上同时运行定时任务?

例如:上午 12 点部署在第一个服务器实例中的应用程序和计划在上午 12 点运行的任务。 相同的应用程序在上午 12.03 部署在第二个服务器实例中,由于部署任务存在差异,因此也在上午 12.03 开始​​使用相同的 cron 表达式,第三个在上午 12.05 部署在上午 12.05 开始的任务。

如何使任务同时运行(在多个实例中运行的所有三个任务需要在上午 12.05 点同时运行),所以我们得到所有三个任务的相同结果。

【问题讨论】:

  • 使用相同的调度表达式...
  • 使用相同的 cron 表达式,因为第二个和第三个服务器实例的部署被延迟,计划任务也开始作为不同的时间..如何让它同时运行所有 3 个?
  • @PhalaniKumar 你能说得更具体点吗?你在使用调度器注解吗?
  • 我们使用带有 cron 表达式的 @Schedule 注释来安排每 5 分钟一次的作业...
  • 每 5 分钟或每小时每 5 分钟。这是一个很大的区别(第一个取决于启动时间,另一个将在 12:00、12:05 等执行)。此外,在处理多个实例时,请确保共享资源确实有效并且不会阻塞。

标签: spring spring-boot synchronization scheduled-tasks java.util.concurrent


【解决方案1】:

cron 参考是关于服务器时间而不是应用程序的部署时间。所以即使它们部署在不同的分钟内,所有的都将在 12.05 准确运行

【讨论】: