2
我使用Spring Batch从Wikipedia XML转储文件(单个30多个gig文件)中提取一些数据。我使用StaxEventItemReader
来读取标签,然后在每个页面上进行一些分析。一旦对每个条目的分析完成后,我将生成的数据注入到数据库中。这是一个非常简单的Spring Batch的工作流程:使用多线程执行Spring批处理阶段
read->process->write
我想处理阶段是多线程的,因为它是自包含的,处理器密集型和写阶段不依赖的顺序。
/process\
read<-process->write
\process/
我已阅读this问题,其中最多的回答说,级之间的数据存储在JobRepository
和说,这是不可取的,存储大量数据的存在。
我已经看到了Spring Batch发行版中的'并行'示例,但是它并行处理整个第二个'加载'步骤(即读取器,处理器和写入器),而不是仅仅并行运行处理。
是否有可能说过程阶段应该在特定大小的线程池中处理?我的工作流程是否适合Spring Batch,还是将它改写为正常的J2SE程序更好?
我不知道春季批次,但你见过[5.3.5。 Split Flows](http://static.springsource.org/spring-batch/reference/html/configureStep.html#split-flows)章节中的文档? – 2012-03-01 12:42:09
我有,但我很难看到如何实现我想要的。 5.3.5和7.2并行步骤中的示例没有显示信息如何在它们之间传递,似乎也没有显示如何将读取的数据分配到处理线程中。 – Rich 2012-03-01 12:49:01
[7.1在文档](http://static.springsource.org/spring-batch/reference/html/scalability.html)说,你可以简单地配置一个'TaskExecutor'到步骤,这将自动导致每个块到在单独的线程中处理。 (我曾经这样做过一次,它只是一个概念验证,它的工作原理与前面描述的一样。) 缺点是'StaxEventItemReader'不是线程安全的。此外,这并不真正回答如何在读者之间传递数据的问题;即使你自己写了,也没有办法分享真正有效的数据。 – Ickster 2012-03-05 13:37:46