如果我有一个简单的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
,因为在发生错误的情况下,我想重新启动分区并仅处理尚未读取和处理的数据。
问题: 如果我有这种情况(几个数据源,并行读取),如果为该特定分区保存了检查点时发生错误,是否可以重新启动作业或分区?
换句话说,即使我必须重新启动作业,我也会为每个分区保存单独的检查点,所以对于每个数据源,我只读取新数据(尚未处理)?
答案 0 :(得分:1)
我只是想知道这个问题的答案,因此我钻研了JSR 352 standard。引用:
由于每个线程运行该步骤的单独副本,因此对于块类型步骤,在每个线程上独立发生分块和检查点。
JBeret's PartitionExecutionImpl类显示基于索引为每个分区存储的数据。只要索引在每次运行中保持一致,检查点就应该在每个分区上。