我有一个@Scheduler
作业,该作业在群集环境中的多台服务器上运行。但是,我想限制该作业只能在一个服务器中运行,而其他任何服务器一旦启动它,其他服务器就不应运行同一作业。
我已经探索了Spring Batch具有使用某些Database表的锁定机制,但是仅在spring task:scheduler
中寻找任何解决方案。
我有相同的问题,我实现的解决方案是使用Hazelcast的Lock机制,并且为了使其易于使用,我还为此添加了适当的注释和一些spring AOP。因此,有了这个技巧,我就可以通过一个注释在整个集群上强制执行一个时间表。
Spring Batch具有很好的功能,它将不会两次使用相同的作业参数运行该作业。
您可以使用此功能,以便当弹簧批处理作业在另一台服务器中启动时不会运行。
通常人们将时间戳记作为参数传递,因此它将通过此逻辑,您可以更改它。