Linux spring集成sftp入站通道适配器和临时文件问题
我们正在使用SpringIntegrationSFTP入站通道适配器,它每隔几秒钟轮询一次,并将zip文件下载到本地目录进行进一步处理。当客户端仍在上载一个大文件,而这个入站适配器拾取了那个不完整的文件时,问题就开始了。我们使用AcceptAllFileFilter进行远程筛选,对于本地筛选,我们有自定义筛选Linux spring集成sftp入站通道适配器和临时文件问题,linux,spring-batch,spring-integration,Linux,Spring Batch,Spring Integration,我们正在使用SpringIntegrationSFTP入站通道适配器,它每隔几秒钟轮询一次,并将zip文件下载到本地目录进行进一步处理。当客户端仍在上载一个大文件,而这个入站适配器拾取了那个不完整的文件时,问题就开始了。我们使用AcceptAllFileFilter进行远程筛选,对于本地筛选,我们有自定义筛选 是否有更好的方法来忽略或检查文件是否已完全上载,然后进行处理?这是ftp获取部分文件的典型问题 有两种常见的解决方案 使用其他名称写入文件,然后重命名它 添加一个特殊文件(例如,当foo.
是否有更好的方法来忽略或检查文件是否已完全上载,然后进行处理?这是ftp获取部分文件的典型问题 有两种常见的解决方案
foo.zip
完成时,foo.done
)foo.zip.writing
写入文件并重命名为foo.zip
)。这是最简单的机制,因为它很容易过滤。编写文件-Spring集成会自动完成这项工作
2) 如果不存在foo.done
,则需要编写一个自定义的FileListFilter
来忽略foo.zip
如果不使用这样的机制,底层FTP协议无法阻止获取部分文件
编辑:
如果您无法控制发件人,则可以编写一个自定义的筛选器
(FileListFilter
),该筛选器仅在一段时间以来未更改的情况下才会提取文件
这不是Spring集成问题,而是任何使用FTP的应用程序都必须解决的问题。Spring Integration提供了一个解决方案,以及针对您的情况解决该问题所需的所有挂钩。文件由不在我们控制范围内的其他客户机交付到sftp drop zone。此外,即使他们同意使用diff扩展名进行写入,然后对其进行重命名,我们仍然会遇到问题,因为对于远程筛选器,我们必须使用AcceptAllFileFilter,因为我们还需要跟踪重复文件出现的次数。