【问题标题】:Schedule job executes twice on cluster调度作业在集群上执行两次
【发布时间】:2011-05-10 11:06:14
【问题描述】:

我们使用 Cron4j java 调度程序来调度每晚执行的作业。现在,当在客户端站点的集群(2 个节点)上部署(Tomcat)相同的 Web 应用程序时,作业会运行两次。有什么办法可以避免这个问题?

【问题讨论】:

  • 您是否考虑过独立运行调度程序而不是 Tomcat 集群的一部分?

标签: java tomcat cluster-computing scheduler


【解决方案1】:

我相信这样做的唯一方法是使用一些外部共享状态,例如在数据库中,以提供一些锁定。

【讨论】:

    【解决方案2】:

    使用Shedlock库,很简单

    @Scheduled(...)
    @SchedulerLock(name = "scheduledTaskName")
    public void scheduledTask() {
    
    }
    

    【讨论】:

      【解决方案3】:

      解决这个问题的方法之一是让你的 webapp 接受一个参数,例如runCronjobs。您可以将相关条目放在web.xml 或其他配置文件中。

      因此,一个 web 应用程序会将这个值设置为 true,而其他部署会将其设置为 false

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-07
        • 2018-08-24
        • 2019-03-07
        • 2022-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多