使用多个线程执行Spring Batch流程阶段

时间:2012-03-01 12:35:12

标签: multithreading spring-batch

我正在使用Spring Batch从Wikipedia XML转储文件中提取一些数据(一个30多个gig文件)。我使用StaxEventItemReader读取标签,然后对每个页面进行一些分析。完成每个条目的分析后,我将生成的数据注入数据库。这是一个非常简单的Spring Batch工作流程:

read->process->write

我希望处理阶段是多线程的,因为它是独立的,处理器密集型,而写阶段不依赖于命令。

     /process\
read<-process->write
     \process/

我已阅读this个问题,其中最佳答案表示阶段之间的数据存储在JobRepository中,并表示不建议在那里存储大量数据。

我在Spring Batch发行版中看到了'并行'示例,但它并行处理整个第二个“加载”步骤(即读取器,处理器和写入器),而不是仅仅并行运行处理。

是否可以说应该在特定大小的线程池中处理进程阶段?我的工作流程是否适合Spring Batch,或者将其重写为普通的J2SE程序更好?

1 个答案:

答案 0 :(得分:0)

您的读者必须是线程安全的。 如果无法做到这一点,我建议你使用一个临时区域:

  • 第一步:分析您的数据并在某处以方便的格式存储它们。
  • 完成后,开始第二步:使用多线程,sql批处理以及我们用Java编写的所有内容来插入数据,以提高性能。

NoSQL数据库可能是存储登台数据的理想选择。