Spring Batch - 如何在多个线程中读取一个大文件?

时间:2011-09-01 19:47:22

标签: multithreading spring file spring-batch

问题:读取大小>的文件10 MB并使用Spring Batch将其加载到临时表中。我们如何在读取文件时保持状态,以便在失败时重新启动作业?

根据文档,FileItemReader不是线程安全的,如果我们尝试使其线程安全,我们最终会失去可重启性。所以基本问题是:

  1. 有没有办法以块的形式读取文件,每个线程都知道需要读取哪个块?
  2. 如果我们使读取同步,那么在这种情况下需要进行哪些更改才能使作业重新启动?
  3. 如果有人遇到类似问题或对其表现有任何分析将有助于我们做出决定。

    此外,任何指针或示例代码都表示赞赏。

1 个答案:

答案 0 :(得分:3)

多线程仅在您的线程同时执行不同操作时才有用。例如,您可以在不同的CPU上运行两个线程。或者一个线程可以等待网络消息而另一个线程正在绘制屏幕。

但是在你的情况下,两个线程都在等待来自同一设备的相同IO,所以使用多个线程没有意义。

另见此问题Reading a file by multiple threads