【问题标题】:Spring task:scheduled or @Scheduler to restrict a Job to run in multiple instanceSpring task:scheduled 或 @Scheduler 限制作业在多个实例中运行
【发布时间】:2020-04-04 12:45:37
【问题描述】:

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

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

【问题讨论】:

    标签: spring spring-boot spring-batch scheduled-tasks quartz-scheduler


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2016-06-29
        • 1970-01-01
        • 2018-11-17
        • 2020-04-04
        • 2012-06-12
        • 2011-12-24
        • 2014-03-09
        • 2017-07-13
        • 1970-01-01
        相关资源
        最近更新 更多