Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux spring集成sftp入站通道适配器和临时文件问题_Linux_Spring Batch_Spring Integration - Fatal编程技术网

Linux spring集成sftp入站通道适配器和临时文件问题

Linux spring集成sftp入站通道适配器和临时文件问题,linux,spring-batch,spring-integration,Linux,Spring Batch,Spring Integration,我们正在使用SpringIntegrationSFTP入站通道适配器,它每隔几秒钟轮询一次,并将zip文件下载到本地目录进行进一步处理。当客户端仍在上载一个大文件,而这个入站适配器拾取了那个不完整的文件时,问题就开始了。我们使用AcceptAllFileFilter进行远程筛选,对于本地筛选,我们有自定义筛选 是否有更好的方法来忽略或检查文件是否已完全上载,然后进行处理?这是ftp获取部分文件的典型问题 有两种常见的解决方案 使用其他名称写入文件,然后重命名它 添加一个特殊文件(例如,当foo.

我们正在使用SpringIntegrationSFTP入站通道适配器,它每隔几秒钟轮询一次,并将zip文件下载到本地目录进行进一步处理。当客户端仍在上载一个大文件,而这个入站适配器拾取了那个不完整的文件时,问题就开始了。我们使用AcceptAllFileFilter进行远程筛选,对于本地筛选,我们有自定义筛选


是否有更好的方法来忽略或检查文件是否已完全上载,然后进行处理?

这是ftp获取部分文件的典型问题

有两种常见的解决方案

  • 使用其他名称写入文件,然后重命名它
  • 添加一个特殊文件(例如,当
    foo.zip
    完成时,
    foo.done
  • Spring集成(在编写端)使用1)(使用
    foo.zip.writing
    写入文件并重命名为
    foo.zip
    )。这是最简单的机制,因为它很容易过滤
    。编写
    文件-Spring集成会自动完成这项工作

    2) 如果不存在
    foo.done
    ,则需要编写一个自定义的
    FileListFilter
    来忽略
    foo.zip

    如果不使用这样的机制,底层FTP协议无法阻止获取部分文件

    编辑

    如果您无法控制发件人,则可以编写一个自定义的
    筛选器
    FileListFilter
    ),该筛选器仅在一段时间以来未更改的情况下才会提取文件


    这不是Spring集成问题,而是任何使用FTP的应用程序都必须解决的问题。Spring Integration提供了一个解决方案,以及针对您的情况解决该问题所需的所有挂钩。

    文件由不在我们控制范围内的其他客户机交付到sftp drop zone。此外,即使他们同意使用diff扩展名进行写入,然后对其进行重命名,我们仍然会遇到问题,因为对于远程筛选器,我们必须使用AcceptAllFileFilter,因为我们还需要跟踪重复文件出现的次数。