Spring批量一读者多个作家

时间:2013-06-19 00:21:33

标签: spring spring-batch

春季批次是否有可能让一个读取器读取数据并将数据拆分为多个写入器以进行并行处理?

步骤: Reader:JdbcCursorItemReader读取100条记录 10个并行写入器:每个ItemWriter获取10个要处理的记录。

我看过:

CompositeItemWriter :当我需要将项目均匀地分配给作者时,似乎将所有读取的项目传递给所有作者。

BackToBackPatternClassifier :我真的不需要分类器,因为我正在均匀地分割项目。

还有其他方式只有一个读者和多个作者吗?

或者我可以在我的Writer中手动创建线程?

3 个答案:

答案 0 :(得分:6)

“多位作家”是什么意思?

您要实现的目标似乎不是多个编写者,而是具有多线程的单个编写者。

要明确的是,当我们谈论“多位作家”时,我们指的是读者阅读一大块,并且需要为大块做不同类型的“写作”。例如你可能有一个从某个地方读取Player的PlayerRecordReader,你有PlayerDbWriter和PlayerFileWriter写入DB和File。多个写入器不用于分配负载。

对于您希望并行完成写入的情况,您需要的是单个编写器(当然您需要使其成为线程安全的)并在步骤定义中使用执行器。 Spring Batch中的这个页面为您提供了有关如何执行此操作的明确说明。 http://static.springsource.org/spring-batch/reference/html/scalability.html#multithreadedStep

答案 1 :(得分:0)

我将我的Writer逻辑移动到Runnable类(Thread类)调用MyWriterRunnable,在MyWriter类中,我手动将项目List拆分为10个批次,并为每个批次调用MyWriterRunnable。

答案 2 :(得分:0)

如果您尝试并行处理数据,则需要对数据进行分区并将块分配给链接步骤。您的分区可以像确定每个线程读取的内容一样简单,也可以从上一步中读取已读取的数据,并将它们分解为均匀分布的块,并为每个线程的每个读者分配一个块进行处理。