1

我正在使用 Spring 批处理来下载一个大文件以进行处理。场景很简单:

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

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

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

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

您如何建议解决这种情况?我应该使用tasklet吗?

谢谢你。

4

2 回答 2

3

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

关于Taskletvs Spring Integration,我们通常推荐 Spring Integration 用于此类功能,因为那里已经提供 FTP 功能。话虽如此,Spring XD 使用了一个Taskletfor FTP 功能,因此采用这种方法并不少见。

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

于 2015-01-02T16:48:23.330 回答
1

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

于 2015-01-02T02:34:33.327 回答