【问题标题】:Batch jobs - prevent concurrency批处理作业 - 防止并发
【发布时间】:2013-08-21 10:58:23
【问题描述】:

我有几个使用 SAP Java Scheduler 在 SAP Java 系统上运行的批处理作业。不幸的是,我没有遇到任何说明如何防止定期作业并发执行的文档。我所看到的只是“作业的新实例将在下一个间隔执行”。这破坏了我的 fi-fo 处理逻辑,所以我需要找到一种方法来防止它。如果调度程序 API 有办法检查相同的作业执行,这将得到解决,但还没有看到示例。

作为一种通用的架构方法,执行此操作的其他方法似乎是使用 DB 表 - 用于标记当前执行的指标表 - 或 JNDI 参数,该参数将在作业开始时首先检查。我也可以“尝试”使用静态整数,但这会使我在集群实例上失败。该系统符合 J2EE5 并支持 EJB 3.0,因此“单一 EJB”也不可用。我可以为 bean 设置最大池大小并可能达到类似的结果。

我想听听您对如何使用不同的架构来实现这一目标的意见。

亲切的问候,

S。 Gökhan Topçu

【问题讨论】:

  • 你能在单线程池中运行这些任务吗?这样可以避免并发。

标签: java batch-file concurrency scheduling sap


【解决方案1】:

您可以像分库一样将作业路由到每个节点,并且您可以像在一个节点中运行一样处理它。

或者您必须使用中心节点,例如 db 或内存缓存或 zookeeper 来防止相同的作业在不同的节点上运行;

【讨论】:

  • 调度程序使用内部 JMS 队列,文档说它将始终在单个节点上运行 - 因此解决了集群问题,我可以使用静态布尔值。做这项工作 - 简单!
猜你喜欢
  • 2017-04-22
  • 2012-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多