gpt4 book ai didi

java - 控制在不同服务器上的不同 JVM 中运行的 Batch 程序的执行

转载 作者:行者123 更新时间:2023-11-28 22:29:28 24 4
gpt4 key购买 nike

我有一个批处理程序(插入/更新/查询数据库的程序)计划使用 Java 计时器每天触发一次。此 Batch 程序在 apache tomcat 中的两个不同服务器中运行。

现在我的问题是 Java Timer API 在两个服务器中并行触发作业,因此我的程序执行了两次,因此我使用不同的主键对相同的记录进行了两次处理。

我需要确保我的程序只触发一次,无论服务器如何,触发都应该动态发生。一旦一个批处理开始,其他批处理就不应开始或其他批处理不应得到处理。

在这里,Tomcat 托管在两台服务器上,每台服务器都部署了相同的应用程序我有一个由两台服务器共享的数据库。

使用Java和spring。

需要建议/帮助解决上述问题。

最佳答案

使用作业调度库,例如 Quartz ,它支持在集群环境中运行作业。
Quartz 有能力确保恰好一个节点将运行该作业,从而防止重复执行作业。您可以阅读更多相关信息 here .
Spring 通过 TaskExecutor 和 TaskScheduler 接口(interface)为任务的异步执行和调度提供抽象。 Spring 还具有支持使用 Quartz Scheduler 进行调度的集成类。有关更多信息,请查看 here .

如果您希望继续使用 Java 计时器,您必须自己处理同步问题。公共(public)解决方案是使用共享锁数据库表。当 2 个节点尝试同时从锁定表读取/写入时,您必须小心不要遇到并发问题。

关于java - 控制在不同服务器上的不同 JVM 中运行的 Batch 程序的执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26646372/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com