群集环境中的Java Batch作业

时间:2011-07-21 05:15:31

标签: java jboss cluster-computing batch-processing spring-batch

我们有一个包含2个JBOSS节点的集群。我们有一个批处理作业,它将所有用户详细信息从活动目录加载到数据库。这项工作每天都在运行。它之前在非集群环境中运行,因此我们将其设计为单例。 现在我们有一个集群环境,我不知道什么是实现相同结果的最佳方法。我希望批处理作业每天只运行一次。我们使用spring和hibernate,然后看了Spring批处理。我无法对我的问题得到任何简明的答案。

如果您在群集环境中实施批处理,请问有谁可以告诉我吗?在这种情况下,最佳解决方案是什么?

3 个答案:

答案 0 :(得分:5)

我们通过MQ从外部触发和启动作业来实现这一点(启动作业的http请求也可以正常工作)。调度程序将消息放入队列中,即使我们有'n'个节点侦听队列,一个节点也会收到消息并根据其内容启动作业。您也可以使用HTTP执行此操作。

对此的真正“解决方案”是将批处理作业“外部”安排,而不是通过内部cron触发器。实际的启动机制是次要的。

答案 1 :(得分:1)

还要考虑具有

功能的https://github.com/willschipp/spring-batch-cluster
  • 批处理作业存储库的后写
  • 群集中的批处理HA(执行作业的自动停止和故障转移)

答案 2 :(得分:0)

通常,从事务系统中外部化/隔离批处理作业有时是个好主意,因此它们不会干扰可用性或性能。话虽如此,如果有充分的理由在集群应用程序中嵌入批处理作业(简单性,代码重用等),那么除了已经提到的解决方案之外,ShedLock是一个很好的选择。

关于它的价值,请注意关于batch jobs in clustered environments的博客文章。