我们有一个包含 2 个 JBOSS 节点的集群。我们有一个批处理作业,它将所有用户详细信息从活动目录加载到数据库。该作业每天运行。它之前在非集群环境中运行,因此我们将其设计为单例。现在我们有一个集群环境,我不知道实现相同结果的最佳方法是什么。我希望批处理作业每天只运行一次。我们使用 spring 和 hibernate,我查看了 Spring 批处理。对于我的问题,我无法得到任何简明的答案。
如果您在集群环境中实施了批处理,有人可以告诉我吗?在这种情况下,最好的解决方案是什么?
我们有一个包含 2 个 JBOSS 节点的集群。我们有一个批处理作业,它将所有用户详细信息从活动目录加载到数据库。该作业每天运行。它之前在非集群环境中运行,因此我们将其设计为单例。现在我们有一个集群环境,我不知道实现相同结果的最佳方法是什么。我希望批处理作业每天只运行一次。我们使用 spring 和 hibernate,我查看了 Spring 批处理。对于我的问题,我无法得到任何简明的答案。
如果您在集群环境中实施了批处理,有人可以告诉我吗?在这种情况下,最好的解决方案是什么?
我们通过 MQ 在外部触发和启动作业来实现这一点(启动作业的 http 请求也可以)。调度程序将一条消息放入队列,即使我们有“n”个节点在监听队列,一个节点也会接收到消息并根据其内容启动作业。您也可以使用 HTTP 执行此操作。
真正的“解决方案”是“外部”安排批处理作业,而不是通过内部 cron 触发器。实际的启动机制是次要的。
还考虑https://github.com/willschipp/spring-batch-cluster的特点
通常,有时将批处理作业与事务系统外部化/隔离是一个好主意,这样它们就不会干扰可用性或性能。话虽如此,如果有充分的理由将批处理作业嵌入到集群应用程序中(简单性、代码重用等),那么除了已经提到的解决方案之外,ShedLock是一个不错的选择。
不管它的价值如何,请注意一篇关于集群环境中的批处理作业的博客文章。