0

我有一项@Scheduler 工作在集群环境中的多台服务器上运行。但是,我想将作业限制为仅在一台服务器中运行,并且一旦任何其他服务器启动它,其他服务器不应运行相同的作业。

我已经探索了 Spring Batch 使用一些数据库表的锁定机制,但只在 spring 中寻找任何解决方案task:scheduler

4

2 回答 2

1

我遇到了同样的问题,我实现的解决方案是带有 Hazelcast 的 Lock 机制,为了使其易于使用,我还为此添加了适当的注释和一些 spring AOP。因此,通过这个技巧,我能够通过单个注释在集群上强制执行单个计划。

于 2019-12-11T09:32:38.247 回答
0

Spring Batch 有一个很好的功能,它不会使用相同的作业参数运行作业两次。

您可以使用此功能,以便当弹簧批处理作业在另一台服务器中启动时它不会运行。

通常人们将时间戳作为参数传递,因此它将绕过此逻辑,您可以更改它。

于 2019-12-13T15:37:32.640 回答