感谢您的关注
我在spring集成中使用了int-ftp:inbound-channel-adapter
,我希望从ftp服务器上检索文件并对其进行处理,并将备份保存在本地目录中,但是当处于启动状态int-ftp:inbound-channel-adapter
的应用程序在备份中创建来自本地旧文件的消息时位置和尝试发送到我的代码通道如下:
<bean id="acceptOnceFilter"
class="org.springframework.integration.file.filters.AcceptOnceFileListFilter" />
<int-ftp:inbound-channel-adapter id="sam-inbound-channel-adapter"
channel="sam-ready-to-process-inbound"
session-factory="sam-ftp-Session"
auto-create-local-directory="true"
delete-remote-files="true"
auto-startup="true"
filename-pattern="*.bmp"
remote-directory="/in/"
remote-file-separator="/"
local-filter="acceptOnceFilter"
preserve-timestamp="true"
local-filename-generator-expression="@fileName.name('sam',#this)"
temporary-file-suffix=".writing"
local-directory="./backup/sam/in//">
<int:poller fixed-rate="10000"/>
</int-ftp:inbound-channel-adapter>
提前致谢
答案 0 :(得分:1)
请see the documentation。您可以使用FileSystemPersistentAcceptOnceFileListFilter
中的local-filter
以及您选择的MetadataStore
来阻止文件在重新启动后进行重新处理。
但是,处理后删除/重命名文件通常会更好;否则性能会随着时间的推移而降低,因为本地目录中必须扫描的文件数量会增加。
由于您要删除远程文件,因此您不需要它,但是(为了完整性)还有一个FtpPersistentAcceptOnceFileListFilter
(在filter
中)以防止重新获取文件重启(delete-remote-files
为假时需要)。
答案 1 :(得分:1)
感谢@Gary帮我设计我的项目,为了解决问题,我使用int-file:outbound-gateway
将文件移动到另一个目录,如下所示:
<int:channel id="ready-to-process-inbound"/>
<int:channel id="ready-to-process-inbound-tmp-mover"/>
<int-ftp:inbound-channel-adapter id="inbound-channel-adapter"
channel="ready-to-process-inbound-tmp-mover"
session-factory="ftp-Session"
auto-create-local-directory="true"
delete-remote-files="true"
auto-startup="true"
filename-pattern="*.bmp"
remote-directory="/in/"
remote-file-separator="/"
preserve-timestamp="true"
local-filename-generator-expression="@fileNameGenerator.by('prefix',#this)"
temporary-file-suffix=".writing"
local-directory="./backup//tmp//">
<int:poller fixed-rate="10000"/>
</int-ftp:inbound-channel-adapter>
<int-file:outbound-gateway id="file-outbound-gateway-tmp-mover"
request-channel="ready-to-process-inbound-tmp-mover"
reply-channel="ready-to-process-inbound"
directory="./backup//in//"
mode="REPLACE" delete-source-files="true"/>