使用 Spring 批处理处理大文件的最佳方法

Best approach using Spring batch to process big file

我正在使用 Spring 批处理下载一个大文件以便对其进行处理。 场景非常简单:

1. Download the file via http
2. process it(validations,transformations)
3. send it into queue

我正在寻找处理这种情况的最佳实践。

我应该创建 Tasklet 以在本地下载文件,然后开始通过常规步骤处理它吗?
在那种情况下,我需要考虑一些临时文件问题 (确保我删除它,确保我没有覆盖其他临时文件名等。)

另一方面,我可以下载它并将其保存在内存中,但我担心如果我运行许多作业实例,很快就会内存不足。

你建议如何确定这个场景?我到底应该使用 tasklet 吗?

谢谢。

我相信下面的例子是您问题的经典解决方案 http://docs.spring.io/spring-batch/trunk/reference/html/springBatchIntegration.html#launching-batch-jobs-through-messages

如果您有一个大文件,我建议您将其存储到磁盘,除非有充分的理由不这样做。通过将文件保存到磁盘,它允许您重新启动作业,而无需在发生错误时重新下载文件。

关于 Tasklet 与 Spring 集成,我们通常建议对此类功能进行 Spring 集成,因为 FTP 功能已经可用。话虽如此,Spring XD 使用 Tasklet 作为 FTP 功能,因此采用这种方法也很常见。

有关 Spring Batch 和 Spring 集成的集成的好视频是我在 SpringOne2GX 上发表的 Gunnar Hillert 演讲。您可以在此处找到完整视频:https://www.youtube.com/watch?v=8tiqeV07XlI。关于在 Spring 批处理之前为 FTP 使用 Spring 批处理集成的部分大约在 29:37。