【问题标题】:Spring Batch - How to read one big file in multiple threads?Spring Batch - 如何在多个线程中读取一个大文件?
【发布时间】:2011-09-01 19:47:21
【问题描述】:

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

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

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

如果有人遇到过类似问题或对其执行情况进行任何分析,将有助于我们做出决定。

此外,感谢任何指针或示例代码。

【问题讨论】:

  • artbristol 做到了。没有理由为您的阅读器添加多线程功能,但这并不一定意味着您的处理器或编写器不会从中受益。

标签: multithreading spring file spring-batch


【解决方案1】:

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

但在您的情况下,两个线程将等待来自同一设备的相同 IO,因此使用多个线程没有意义。

另请参阅此问题Reading a file by multiple threads

【讨论】:

  • 在不同线程中并行拆分读取、处理和写入不会提高性能吗?
  • 嗨@artbristol,我将我的单个XML 拆分为多个XML,但仍然没有达到预期的性能。stackoverflow.com/questions/29166558/… 你能建议吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-04
  • 1970-01-01
  • 1970-01-01
  • 2021-11-03
  • 2011-04-01
相关资源
最近更新 更多