我需要处理放在特定文件夹中的任何文件。这些文件可以具有相同的名称。稍后它将由专有bean处理,该bean将根据文件名的重复状态重命名文件扩展名(如果文件之前从未处理过,则为xxx.origin,对于相反的条件,则为xxx.duplicate)。
根据此要求,我决定使用file-inbound-channel-adapter
和spring-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
由于文件的锁定状态而无法正常工作。
我有什么办法可以达到这个要求吗?
答案 0 :(得分:1)
目前尚不清楚为什么需要多个适配器轮询同一目录 - 如果需要实现并发处理,请使用单个适配器并将任务执行程序添加到轮询器(或使用下游的执行程序通道)。
如果您必须有多个适配器实例,并且可以使用较新版本的Spring Integration(4.1.7或更高版本,当前版本为4.2.6),则可以使用共享AcceptOnceFileListFilter
,现在为{ {1}}因此,当您重命名文件时,可以将其从过滤器中删除。
如果您无法使用较新版本的Spring Integration,则需要一个自定义ResettableFileListFilter
,允许您在处理后删除该文件。