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

时间:2015-01-01 09:52:37

标签: java spring batch-processing spring-batch spring-batch-admin

我正在使用Spring批量下载一个大文件来处理它。 场景非常简单:

1. Download the file via http
2. process it(validations,transformations)
3. send it into queue
  • 无需保存输入文件数据。
  • 我们可能在同一时间运行多个作业实例(同一场景)

我正在寻找处理这种情况的最佳做法。

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

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

你会如何建议这种情况?我应该使用tasklet吗?

谢谢。

2 个答案:

答案 0 :(得分:3)

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

关于Tasklet vs Spring Integration,我们通常建议使用Spring Integration来实现此类功能,因为FTP功能已经存在。话虽这么说,Spring XD使用Tasklet来实现FTP功能,所以采用这种方法并不罕见。

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

答案 1 :(得分:1)