2011-12-13 107 views
0

我有以下用例:我需要处理大量文件。每个处理看起来或多或少像这样:在Spring批处理中顺序处理多个文件

1)读文件

2)执行操作(a)在该内容

3)执行操作(b)上的内容

4 )对内容执行操作(c)中

... 

n)的删除文件

Spring批处理看起来像是一个很好的解决方案,但有一个例外:我不想在步骤1)中读取所有文件,将所有文件都传递给步骤2)等,因为它会占用大量内存。

编辑:我提交我的文件到内存(而不是数据库)。这就是为什么我更喜欢逐个或分批处理文件的原因。我的意思是:在单个文件/批处理中运行所有步骤(文件/批处理在最后一步被删除,内存得到清理),然后继续下一个文件/批处理等等。

Spring Batch是否有支持多次执行所有步骤的机制? 或者我应该多次运行相同的工作,直到我用完文件?

感谢和问候, 彼得

回答

1

对于N个文件的简单情况,您需要执行N个作业,每个作业都会传递一个文件名JobParameter。您的每个处理步骤都不能用Spring Batch表示,但您可以使用CompositeItemProcessor来链接处理器。

+0

对不起,这个问题有点过时了,但是你在这里写的正是我最终做的:)谢谢 – machinery

2

在Spring Batch的文件,这是multi-file input

它与一个步下处理,这是什么会做的是:

  • 创建的文件列表地址
  • 打开第一个文件,读取/处理结束,关闭文件
  • 打开下一个...等等
+0

嗯...谢谢,这会在一些情况下帮助我一点点,但如果我需要运行多个步骤,这将导致我一次加载所有文件,对吧? 这是我想避免的,而不是混乱我的记忆。 但是,谢谢你的提示:) – machinery

+0

没有文件顺序处理,单个文件不完全在内存中,实现使用标准的Java机制与文件(指针)和缓冲流,所以只有读取项目*提交率是保存在内存中(例如,提交率1000,意味着1000条读取行,转换为条目) –

+0

哦,对不起,我似乎没有完全解释我的情况。我将读取的文件内容提交到内存中。这就是为什么我更愿意在单个文件上执行所有步骤,然后在下一个文件上执行所有步骤等等(因为在最后一步中我删除了该文件)。 – machinery

相关问题