远程持久文件列表过滤器

入站和流式处理入站远程文件通道适配器 (FTP,SFTP和其他技术)配置了相应的AbstractPersistentFileListFilter默认情况下,使用 In-Memory 配置MetadataStore. 要在集群中运行,可以使用共享的MetadataStore(有关更多信息,请参阅 元数据存储 )。 这些过滤器用于防止多次获取同一文件(除非修改时间更改)。 从版本 5.2 开始,在获取文件之前立即将文件添加到过滤器中(如果获取失败,则撤消)。spring-doc.cadn.net.cn

如果发生灾难性故障(例如断电),当前正在获取的文件可能会保留在过滤器中,并且在重新启动应用程序时不会重新获取。 在这种情况下,您需要从MetadataStore.

在以前的版本中,在提取任何文件之前都会过滤文件,这意味着在发生灾难性故障后,多个文件可能处于此状态。spring-doc.cadn.net.cn

为了促进这种新行为,在FileListFilter.spring-doc.cadn.net.cn

boolean accept(F file);

boolean supportsSingleFileFiltering();

如果筛选条件返回truesupportsSingleFileFiltering,它必须实现accept().spring-doc.cadn.net.cn

如果远程过滤器不支持单个文件过滤(例如AbstractMarkerFilePresentFileListFilter),则适配器将恢复为之前的行为。spring-doc.cadn.net.cn

如果使用了多个过滤器(使用CompositeFileListFilterChainFileListFilter),则所有委托过滤器都必须支持单个文件过滤,复合过滤器才能支持它。spring-doc.cadn.net.cn

持久文件列表过滤器现在具有布尔属性forRecursion. 将此属性设置为true,还会设置alwaysAcceptDirectories,这意味着出站网关 (lsmget) 现在每次都始终遍历完整的目录树。 这是为了解决未检测到目录树深处更改的问题。 另外forRecursion=true使文件的完整路径用作元数据存储键;这解决了以下问题:如果具有相同名称的文件在不同目录中多次出现,则过滤器无法正常工作。 重要说明:这意味着对于顶级目录下的文件,将无法找到持久性元数据存储中的现有键。 因此,该属性为false默认情况下;这可能会在未来版本中更改。spring-doc.cadn.net.cn