0

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

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

4

2 回答 2

0

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

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

于 2018-07-03T11:14:20.633 回答
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>
于 2018-07-04T18:50:10.337 回答