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