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

时间:2015-06-04 10:59:13

标签: linux spring-batch spring-integration

我们使用spring integration sftp入站通道适配器,每隔几秒轮询一次,并将zip文件下载到本地目录以进行进一步处理。当有一个大文件,其中客户端仍在上载该文件时,问题就会启动,并且此入站适配器会选择该不完整的文件。我们使用AcceptAllFileFilter进行远程过滤,对于本地我们使用自定义过滤器。

是否有更好的方法可以忽略或检查文件是否已完全上传,然后选择进行处理?

1 个答案:

答案 0 :(得分:0)

这是(s)ftp - 获取部分文件的典型问题。

有两种常见的解决方案......

  1. 使用其他名称编写文件,然后重命名。
  2. 添加一个特殊文件(例如foo.zip完成后的foo.zip.writing)。
  3. Spring Integration(在写作方面)使用1)(用foo.zip写入文件并重命名为.writing)。这是最简单的机制,因为它很容易过滤FileListFilter文件 - Spring Integration会自动执行此操作。

    2)有点困难,因为如果foo.zip不存在,您需要编写自定义foo.done以忽略filter

    基础(S)FTP协议无法在不使用这些机制的情况下阻止获取部分文件。

    修改

    如果您无法控制发件人,则可以编写自定义FileListFilter$path = Agroindustri::find() ->where(['id_wilayah' => $idFeed]) ->asArray() ->all(); ),该文件只会在一段时间内未更改时才会获取文件。

    这是一个Spring Integration问题,这是使用(S)FTP的任何应用程序必须解决的问题。 Spring Integration提供了一个解决方案,以及根据您的情况解决它所需的所有钩子。