如何避免SFTP上的重复文件处理

时间:2018-05-04 11:15:44

标签: optimization sftp spring-integration-sftp sshj

我们有一个java应用程序每隔30分钟轮询来自客户端FTP的文件,然后扫描所有文件,看看所有文件与应用程序内部配置的模式匹配,并根据该过程相应地处理文件。这里的问题是我们必须每30分钟进行一次线性扫描,这需要花费太多时间。由于我们不想处理重复文件,因此我们在最后维护文件的哈希码,然后检查哈希码是否与现有的哈希码匹配。由于权限,无法删除已处理的文件。在这里需要帮助来优化这一点。

我们正在使用SSHJ库进行SFTP通信。

2 个答案:

答案 0 :(得分:0)

您无法将客户端的哈希码与服务器端文件的文件的哈希码进行比较(因为必须下载该文件)。

您可以做的是: 在服务器上执行ls命令,获取fileinfo(日期,大小,名称,isDir)信息。 使用它作为哈希码进行比较。 跳过那些已经存在哈希码的用户。

答案 1 :(得分:0)

为什么不使用SFTP入站通道适配器并将其与 SftpPersistentAcceptOnceFileListFilter 结合使用?这将跟踪已经下载的文件,而不是两次下载它们。

<int-sftp:inbound-channel-adapter ...
    filter="remoteFilter">...</...

<bean class="org.springframework.integration.sftp.filters.SftpPersistentAcceptOnceFileListFilter">
    <constructor-arg name="store" ref="metadataStore"/>
    <constructor-arg value="myapp"/>
</bean>

<bean name="metadataStore" class="org.springframework.integration.metadata.PropertiesPersistingMetadataStore">
    <property name="baseDirectory" value="./metadata"/>
</bean>