如何防止处理 `int-ftp:inbound-channel-adapter 中的旧文件?
how to prevent process on old files in `int-ftp:inbound-channel-adapter `?
感谢关注
我在 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>
提前致谢
请see the documentation。您可以在 local-filter
中使用 FileSystemPersistentAcceptOnceFileListFilter
以及您选择的 MetadataStore
,以防止文件在重新启动后被重新处理。
不过,一般情况下delete/rename处理后的文件会更好;否则随着本地目录中必须扫描的文件数量的增加,性能会随着时间的推移而降低。
因为你正在删除远程文件,你不需要它,但是(为了完整性)还有一个 FtpPersistentAcceptOnceFileListFilter
(在 filter
中)以防止在删除后重新获取文件重新启动(当 delete-remote-files
为 false 时需要)。
感谢@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"/>
感谢关注
我在 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>
提前致谢
请see the documentation。您可以在 local-filter
中使用 FileSystemPersistentAcceptOnceFileListFilter
以及您选择的 MetadataStore
,以防止文件在重新启动后被重新处理。
不过,一般情况下delete/rename处理后的文件会更好;否则随着本地目录中必须扫描的文件数量的增加,性能会随着时间的推移而降低。
因为你正在删除远程文件,你不需要它,但是(为了完整性)还有一个 FtpPersistentAcceptOnceFileListFilter
(在 filter
中)以防止在删除后重新获取文件重新启动(当 delete-remote-files
为 false 时需要)。
感谢@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"/>