【发布时间】:2016-05-05 16:55:39
【问题描述】:
通过阅读 Spring SFTP 文档 (http://docs.spring.io/spring-integration/reference/html/sftp.html),尚不清楚是否可以防止重新下载成功传输的文件,这些文件随后会被删除。
正在传输的文件很大,由本地任务处理,然后可以删除。
但是,Spring SFTP 会发现它们已被删除(在运行时或重新启动时)并重新下载它们。
我已经在使用 SftpPersistentAcceptOnceFileListFilter 来避免重启。
上面的讨论是指在检索之前过滤文件 他们。一旦文件被检索到,一个额外的过滤器是 应用于文件系统上的文件。默认情况下,这是 an
AcceptOnceFileListFilter,正如所讨论的,在 内存并且不考虑文件的修改时间。除非你的 应用程序在处理后删除文件,适配器将 应用程序重启后默认重新处理磁盘上的文件。此外,如果您将过滤器配置为使用 FtpPersistentAcceptOnceFileListFilter,以及远程文件时间戳 更改(导致它被重新获取),默认的本地过滤器将 不允许处理这个新文件。
使用 local-filter 属性来配置本地的行为 文件系统过滤器。要解决这些特定用例,您可以使用 FileSystemPersistentAcceptOnceFileListFilter 作为本地过滤器 反而。此过滤器还存储接受的文件名和修改
MetadataStore策略实例中的时间戳(第 9.5 节, “元数据存储”),并将检测本地文件中的更改 修改时间。
从这里,它提到本地文件被删除,我不知道我应该做什么。
这是我的相关配置:
<int-sftp:inbound-channel-adapter id="sftpInboundAdapter"
auto-startup="true" channel="receiveChannel" session-factory="sftpSessionFactory"
local-directory="file:local-dir" remote-directory="files"
auto-create-local-directory="true" delete-remote-files="false"
filter="compositeFilter">
<int:poller fixed-rate="1000" max-messages-per-poll="1" />
</int-sftp:inbound-channel-adapter>
<bean id="compositeFilter"
class="org.springframework.integration.file.filters.CompositeFileListFilter">
<constructor-arg>
<list>
<bean
class="org.springframework.integration.sftp.filters.SftpSimplePatternFileListFilter">
<constructor-arg value="*.zip" />
</bean>
<bean
class="org.springframework.integration.sftp.filters.SftpPersistentAcceptOnceFileListFilter">
<constructor-arg name="store" ref="metadataStore" />
<constructor-arg value="foo/bar" />
</bean>
</list>
</constructor-arg>
</bean>
【问题讨论】:
标签: java spring spring-integration spring-integration-sftp