具有多个 JVM 的多个实例的应用程序中的 Spring Scheduler 代码

nar*_*ddy 3 spring scheduled-tasks spring-batch spring-boot

我有一个使用fixedDelay或配置的 spring 调度程序任务cron,并且该应用程序的多个实例在多个 JVM 上运行。

默认行为是所有实例都在执行调度程序任务。

有没有一种方法可以控制这种行为,以便只有一个实例会执行调度程序任务,而其他实例则不会。

如果您知道任何方法,请告诉我。

谢谢

lub*_*nac 5

我们有类似的问题。我们是这样修复的:

  1. @Scheduled从我们的 Spring Boot 服务中删除了所有bean。
  2. 创建了按所需时间表安排的 AWS Lambda 函数。
  3. Lambda 函数通过调度请求访问我们的顶级域。
  4. 负载均衡器将此请求转发到服务实例之一。

通过这种方式,我们可以确保计划任务在我们的服务集群中只执行一次。