远程持久文件列表过滤器
入站和流式处理入站远程文件通道适配器 (FTP
,SFTP
和其他技术)配置了相应的AbstractPersistentFileListFilter
默认情况下,使用 In-Memory 配置MetadataStore
.
要在集群中运行,可以使用共享的MetadataStore
(有关更多信息,请参阅 元数据存储 )。
这些过滤器用于防止多次获取同一文件(除非修改时间更改)。
从版本 5.2 开始,在获取文件之前立即将文件添加到过滤器中(如果获取失败,则撤消)。
如果发生灾难性故障(例如断电),当前正在获取的文件可能会保留在过滤器中,并且在重新启动应用程序时不会重新获取。
在这种情况下,您需要从MetadataStore . |
在以前的版本中,在提取任何文件之前都会过滤文件,这意味着在发生灾难性故障后,多个文件可能处于此状态。
为了促进这种新行为,在FileListFilter
.
boolean accept(F file);
boolean supportsSingleFileFiltering();
如果筛选条件返回true
在supportsSingleFileFiltering
,它必须实现accept()
.
如果远程过滤器不支持单个文件过滤(例如AbstractMarkerFilePresentFileListFilter
),则适配器将恢复为之前的行为。
如果使用了多个过滤器(使用CompositeFileListFilter
或ChainFileListFilter
),则所有委托过滤器都必须支持单个文件过滤,复合过滤器才能支持它。
持久文件列表过滤器现在具有布尔属性forRecursion
.
将此属性设置为true
,还会设置alwaysAcceptDirectories
,这意味着出站网关 (ls
和mget
) 现在每次都始终遍历完整的目录树。
这是为了解决未检测到目录树深处更改的问题。
另外forRecursion=true
使文件的完整路径用作元数据存储键;这解决了以下问题:如果具有相同名称的文件在不同目录中多次出现,则过滤器无法正常工作。
重要说明:这意味着对于顶级目录下的文件,将无法找到持久性元数据存储中的现有键。
因此,该属性为false
默认情况下;这可能会在未来版本中更改。