文件入站通道适配器同时处理相同的文件

时间:2016-05-28 22:07:28

标签: spring spring-integration

我需要处理放在特定文件夹中的任何文件。这些文件可以具有相同的名称。稍后它将由专有bean处理,该bean将根据文件名的重复状态重命名文件扩展名(如果文件之前从未处理过,则为xxx.origin,对于相反的条件,则为xxx.duplicate)。

根据此要求,我决定使用file-inbound-channel-adapterspring-integration-3.0.8。我将prevent-duplicates属性设置为false,因此我可以处理所有文件。但是,我发现1个文件可以同时由2 file-inbound-channel-adapter处理(即使第二个适配器是偶然创建的 - 在上下文和servlet中初始化两次)。但这对我来说是一个问题,因为我实际上打算创建多个file-inbound-channel-adapter来处理同一文件夹中的所有文件,我得到的结果是1个输入文件同时由2个bean处理两次它得到了我2输出文件(xxx.origin和xxx.duplicate)。我也无法使用FileLocker,因为file-to-string-transformer由于文件的锁定状态而无法正常工作。

我有什么办法可以达到这个要求吗?

1 个答案:

答案 0 :(得分:1)

目前尚不清楚为什么需要多个适配器轮询同一目录 - 如果需要实现并发处理,请使用单个适配器并将任务执行程序添加到轮询器(或使用下游的执行程序通道)。

如果您必须有多个适配器实例,并且可以使用较新版本的Spring Integration(4.1.7或更高版本,当前版本为4.2.6),则可以使用共享AcceptOnceFileListFilter,现在为{ {1}}因此,当您重命名文件时,可以将其从过滤器中删除。

如果您无法使用较新版本的Spring Integration,则需要一个自定义ResettableFileListFilter,允许您在处理后删除该文件。

相关问题