是否在JEE批处理中为每个分区保存检查点?

时间:2018-11-08 22:25:29

标签: java-ee batch-processing

如果我有一个简单的JEE批处理作业,并且该步骤可以并行处理数据。

我想从不同的来源读取数据,因为它们是独立的-可以在多个线程中同时进行。

步骤:

<step id="step1">
  <chunk checkpoint-policy="item" item-count="15">
    <reader ref="MyReader">
      <properties>
        <!-- some properties -->
      </properties>
    </reader>
    <processor ref="MyProcessor"></processor>
    <writer ref="MyWriter"></writer>
  </chunk>
  <partition>
    <mapper ref="MyPartitionMapper"/>
  </partition>
</step>

假设我的reader正在使用checkpoint,因为在发生错误的情况下,我想重新启动分区并仅处理尚未读取和处理的数据。

问题: 如果我有这种情况(几个数据源,并行读取),如果为该特定分区保存了检查点时发生错误,是否可以重新启动作业或分区?

换句话说,即使我必须重新启动作业,我也会为每个分区保存单独的检查点,所以对于每个数据源,我只读取新数据(尚未处理)?

1 个答案:

答案 0 :(得分:1)

我只是想知道这个问题的答案,因此我钻研了JSR 352 standard。引用:

  

由于每个线程运行该步骤的单独副本,因此对于块类型步骤,在每个线程上独立发生分块和检查点。

JBeret's PartitionExecutionImpl类显示基于索引为每个分区存储的数据。只要索引在每次运行中保持一致,检查点就应该在每个分区上。