2016-07-27 61 views
0

我正在使用spring batch处理processinglarge dataSpring批处理并行处理两个任务,但第二个任务依赖于第一个任务

我的问题是我有两个不同的Taskletexecutingone after another。我不能并行运行,因为第二个tasklet先有一个依赖关系Tasklet。为了节省时间,我想在的前几个tasklet之后立刻开始下一个Tasklet。由于Spring Batch使用Chunk Oriented处理风格。一个Tasklet可以ItemWriter,将已处理物品的大块传递给另一个TaskletItemReaderItemProcessorItemWriter用于下一个处理?但虽然另一个tasklet正在对chunk,前tasklet应该NOT等待,它应该继续iterationnextchunk

+0

是每个项目的依赖项吗?你能用一个阅读器和一个复合物品处理器/作家吗? –

+0

@DeanClark我需要在'ItemWriter'写出数据库中项目的卡盘后开始下一个任务。我的下一个任务的'ItemReader'将从数据库中选择这些项目,或者在其他情况下,我也可以将项目列表传递给下一个任务的'ItemWriter',但是这些项目在下一步处理之前应该在数据库中提交。谢谢回复。 –

回答

1

根据您的描述和上述附加信息,我将简单地使用CompositeItemWriter来实现此目的。

项目列表将首先由WriterOne写入,然后传递给WriterTwo并写入。

<bean id="compositeWriter" 
     class="org.springframework.batch.item.support.CompositeItemWriter"> 
    <property name="delegates"> 
     <list> 
      <ref bean="writerOne" /> 
      <ref bean="writerTwo" /> 
     </list> 
    </property> 
</bean> 

<bean id="writerOne" ... /> 
<bean id="writerTwo" ... /> 
+0

这是可能的 - 当'writerTwo'处理大块项目时,'Tasklet'不应该等待,'ItemReader'应该继续'迭代'到'下一个块'上?如果你已经注意到了,在我的问题中,我也问过'当另一个tasklet在这个块上工作时,以前的tasklet不应该等待,它应该继续迭代下一个块。非常感谢你。 –

+0

是否担心第二次操作(由'writerTwo'执行的操作)比第一次操作花费的时间要长得多?通常,重读和解析记录的开销以及与之相关的相关IO会使读取相同数据的次数少于两次同步写入器的吸引力。 –

相关问题