在多节点环境中仅触发调度作业一次

时间:2018-01-05 13:05:27

标签: java docker spring-boot docker-swarm

我使用Docker swarm模式运行多个Java(Spring Boot)应用程序实例,我想每天运行两次计划作业,但只需要一个应用程序实例触发它。

是否有任何机制可以配置Spring Boot应用程序和Docker swarm来运行该计划任务一次?

我在Jive的房产中见过:

<property name="allNodes" value="false"/>

现在我想知道我是否可以在我的基础设施上做类似的事情。

应用程序实例位于同一网络中,因此我认为网络发现不会成为问题。

1 个答案:

答案 0 :(得分:1)

您是否可以将一个节点创建为主节点,并且预定作业将仅在主节点中运行。如果失败,其他节点将被提升并成为主节点,因此有资格运行该作业。

或者你可以创建一个分布式锁(Hazelcast支持分布式锁)。每个节点都会调用tryLock()。节胜将允许运行该作业。