使用 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。
我正在使用 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。