1

Is it possible in spring batch to have one reader read the data and that data being split to multiple writers for processing running parallel?

Steps: Reader : JdbcCursorItemReader reads 100 records 10 Parallel Writers: Each ItemWriter gets 10 records to process.

I've looked at:

CompositeItemWriter: seems to passes all the read items to all the writers when I need to split the items evenly to the writers.

BackToBackPatternClassifier: I don't really need a classifier because I'm splitting items evenly.

Is there another way of just having one reader and multiple writers ?

Or I can just manually create threads in my Writer ?

4

3 回答 3

7

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

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

需要明确的是,当我们谈论“多个写入者”时,我们的意思是读者读取了一个块,并且需要为该块做不同类型的“写入”。例如,您可能有一个 PlayerRecordReader 从某个地方读取 Player,并且您有 PlayerDbWriter 和 PlayerFileWriter 写入 DB 和 File。多个写入器不是为了分配负载。

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

于 2013-06-19T01:40:08.130 回答
0

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

于 2013-06-19T03:08:13.403 回答
0

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

于 2015-03-19T06:18:27.023 回答