【问题标题】:Spring Batch on Clustered environment - Websphere集群环境上的 Spring Batch - Websphere
【发布时间】:2014-12-17 00:53:47
【问题描述】:

我确实设置了一个 Spring Batch 作业,它在单个 JVM 上运行良好。但我需要将它部署到集群环境中。我正在使用 spring 任务调度程序来安排作业。有没有办法在集群环境中做到这一点,如果一个节点关闭,另一个应该接起来。要部署的服务器是 Webspehere。

【问题讨论】:

  • 使用类似quartz的集群感知调度器。
  • 那么如果我通过 Quartz 安排一个作业,它会是持久的并在节点之间切换吗?
  • 这取决于您如何配置quartz,您应该使用有状态作业(即数据库持久化),然后作业将在单个节点上运行。如果一个崩溃,下一个作业将在仍在运行的节点上启动。但这也取决于您的石英和批处理配置。

标签: spring websphere batch-processing


【解决方案1】:

SpringBatch 不支持任何集群执行方式。如果您希望您的任务被集群化,您应该检查产品,我可以建议您查看hazelcast

【讨论】:

    【解决方案2】:

    两个建议:

    1. 石英setup in the DB
    2. Hazelcast 通过Apache Camel Idempotent repository

    这两种方法都将确保您的任务只完成一次

    第一种方法需要(繁琐的)Quartz DB 设置,但随后您可以直接连接非集群的 Websphere webapp。

    第二种方法不需要持久存储,并且通过 Apache Camel 包装器使设置变得轻而易举。

    【讨论】:

    • 我正在尝试使用您的第一种方法,使用 Quartz 设置,但在此配置 stackoverflow.com/questions/32647018/… 匹配 Quartz 作业和 Spring Batch 作业时遇到问题。您能提出一些解决方案吗?
    【解决方案3】:

    我终于让它与 EJB 持久计时器一起使用,启动 spring 批处理作业。这些 EJB 计时器的事务类型已定义为 Bean Transaction,因此它不是容器管理的。 Websphere 调度程序负责使用 EJB 计时器进行集群。因此,spring 批处理作业一次只能在一台服务器上启动。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-05
      • 1970-01-01
      • 2021-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-18
      相关资源
      最近更新 更多