我正在使用 Spring Batch 从 Wikipedia XML 转储文件(一个 30 多个 gig 文件)中提取一些数据。我正在使用 StaxEventItemReader
读入标签,然后对每个页面进行一些分析。完成每个条目的分析后,我会将结果数据注入(inject)数据库。这是一个非常简单的 Spring Batch 工作流程:
read->process->write
我希望处理阶段是多线程的,因为它是独立的、处理器密集型的,并且写入阶段不依赖于顺序。
/process\
read<-process->write
\process/
我已阅读 this问题,其中最重要的答案是阶段之间的数据存储在
JobRepository
并表示不建议在此处存储大量数据。我在 Spring Batch 发行版中看到了“并行”示例,但这会并行处理整个第二个“加载”步骤(即读取器、处理器和写入器),而不仅仅是并行运行处理。
是否可以说进程阶段应该在特定大小的线程池中处理?我的工作流程是否适合 Spring Batch,还是将其重写为普通的 J2SE 程序更好?
最佳答案
您的阅读器必须是线程安全的。
如果这不可能,我建议您使用暂存区:
也许 NoSQL 数据库可能是存储暂存数据的好选择。
关于multithreading - 使用多个线程执行 Spring Batch 进程阶段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9516362/