gpt4 book ai didi

spring-batch - Spring Batch 单线程读取器和多线程写入器

转载 作者:行者123 更新时间:2023-12-05 06:39:36 32 4
gpt4 key购买 nike

试图找到以前是否有人问过这个问题,但找不到。

问题来了。以下必须通过Spring批处理来实现有一个文件需要读取和处理。项目阅读器不是线程安全的。计划是让多线程同质处理器和多线程同质写入器插入由单线程读取器读取的项目。

有点像下面:

        ----------> Processor #1 ----------> Writer #1
|
Reader -------> Processor #2 ----------> Writer #2
|
----------> Processor #3 ----------> Writer #3

尝试了 AsyncItemProcessor 和 AsyncItemWriter,但在处理器上保持调试点导致读取器在释放点之前不会执行,即单线程处理。

任务执行器尝试如下:

<tasklet task-executor="taskExecutor" throttle-limit="20">

阅读器上的多个线程已启动。

同步读取器也不起作用。

我试图阅读有关分区程序的内容,但它看起来很复杂。

是否有注释将阅读器标记为单线程?将读取数据推送到全局上下文是个好主意吗?

请指导解决方案。

最佳答案

我猜 Spring Batch API 中没有针对您要查找的模式的内置内容。需要您自己编写代码才能实现您的目标。

Method ItemWriter.write已经根据您的 block 大小获取已处理项目的 List,因此您可以将该 List 分成任意数量的线程。您生成自己的线程并将列表的一部分传递给每个要写入的线程。

问题出在 method ItemProcesor.process() 上因为它逐项处理,所以您受限于单个项目,并且您将无法对单个项目进行大量线程处理。

因此,挑战在于编写您自己的阅读器,而不是将项目列表而不是单个项目交给处理器,这样您就可以并行处理这些项目,而编写器将处理列表列表。

在所有这些设置中,您必须记住,您生成的线程将超出 Spring 批处理的读取-处理-写入事务边界,因此您必须自己处理 - 在合并方面处理所有线程的输出并等待所有线程完成并处理任何错误。总之,风险很大。

Making a item reader to return a list instead single object - Spring batch

关于spring-batch - Spring Batch 单线程读取器和多线程写入器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44245655/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com