2011-09-01 123 views
5

问题:读取大小> 10 MB的文件,并使用Spring Batch将其加载到登台表中。如何在读取文件时保持状态,以便在失败时重新启动作业?Spring批处理 - 如何在多个线程中读取一个大文件?

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

  1. 有没有办法以块读取文件,每个线程知道哪个块需要读取?
  2. 如果我们使读取同步,在这种情况下需要进行哪些更改才能使作业重新启动?

如果有人遇到过类似的问题或者对它的表现有任何分析会帮助我们做出决定。

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

+0

artbristol钉它。没有理由为您的读者添加多线程功能,但这并不一定意味着您的处理器或作者不会从中受益。 – Floegipoky

回答

3

只有当你的线程同时做不同的事情时,多线程才有用。例如,你可以有两个线程在不同的CPU上运行。或者一个线程可以等待网络消息,另一个线程正在绘制屏幕。

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

也看到这个问题Reading a file by multiple threads

+0

将并行分割读取,处理和写入不同线程不会提高性能吗? – Ketan

+0

嗨@artbristol,我将我的单个XML分成多个XML,但仍然没有得到预期的性能.. http://stackoverflow.com/questions/29166558/spring-batch-multi-file-resource-takes-same-time- as-single-thread可以请你提出建议吗? – Ketan

相关问题