Spring integration 如何使Spring Integration FTP入站通道适配器的本地筛选器默认使用远程筛选器

Spring integration 如何使Spring Integration FTP入站通道适配器的本地筛选器默认使用远程筛选器,spring-integration,Spring Integration,对于Spring Integration FTP入站通道适配器,如果我没有显式设置本地筛选器,是否可以使用远程筛选器的值作为默认值 <int-ftp:inbound-channel-adapter id="myChannel" channel="nullChannel" session-factory="cachingSessionFactor

对于Spring Integration FTP入站通道适配器,如果我没有显式设置本地筛选器,是否可以使用远程筛选器的值作为默认值

<int-ftp:inbound-channel-adapter id="myChannel"
                                     channel="nullChannel"
                                     session-factory="cachingSessionFactory"
                                     filename-pattern="abc_2017*.txt"
                                     remote-directory="/"
                                     preserve-timestamp="true"
                                     local-directory="c:/temp">
    <int:poller cron="15 * * * * ?" max-messages-per-poll="-11" />
</int-ftp:inbound-channel-adapter>
e、 g.在我的用例中,远程目录包含abc_201701.txt、abc_201702.txt等,模式文件名pattern=abc_2017*.txt将让我成功下载所有这些文件。但是,如果我的本地目录包含附加文件,例如def.txt,则将生成所有3个文件abc_201701.txt、abc_201702.txt和def.txt消息


我认为,如果我没有明确设置,本地过滤器默认会尊重远程过滤器,这更有意义,即只会生成两条消息abc_201701.txt和abc_201702.txt。

IMO这一建议令人困惑。远程筛选器基于远程实体,但在文件对象上是本地的。此外,我们还有localFilenameGeneratorExpression,其中本地名称可能与远程名称无关,因此任何将文件名模式复制到本地版本都是奇怪的。此外,这种想法仅对基于名称的过滤器有很强的限制。这在为什么需要本地筛选器以及默认情况下如何使用FileSystemTempersistentAcceptOnCefileListFilter中有明确的描述

OTOH框架不负责处理本地目录中的意外内容。本地部分只是常规的FileReadingMessageSource-。因此,它很自然地希望目录中有任何文件


你应该考虑在启动应用程序之前清理目录,或者想出一些本地过滤器,这些过滤器不会选择那些可疑文件。

同意-删除我的答案。为什么我提出这个问题与我的用例有关。我有一个远程文件在ftp,这是不断更新。对于每次轮询,我将下载文件并触发diff程序生成delta文件,可能会在文件名后面加上时间戳,并将其存储在下载目录的同一目录中。如果我没有设置本地过滤器,FileReadingMessageSource将重复生成增量文件和带有时间戳的后缀,而不仅仅是基于远程ftp文件生成增量。i、 e.abc.txt.20170626、abc.txt.20170626.20170626、abc.txt.20170626.20170626等作为一个普通SI用户,我可能只配置属性子集。我可能认为,如果我只是设置文件名模式并下载文件,即不设置本地fitler,那么事件的生成将与下载的文件相同。这就是为什么我要问lcoal过滤器是否应该将远程文件过滤器作为默认过滤器,以避免意外。不管怎样,我同意Artem的解释。这就是你的用例。而且它看起来并不琐碎。那么,使用现有建议并指定适当的本地过滤器(即使它可能具有相同的模式语义)有什么问题呢?正如我所说的:您只是运气不好,您的逻辑是基于感觉像是支持继承的模式,但问题更广泛,在Java配置的情况下,我们必须为远程部分指定FtpSimplePatternFileListFilter,为本地部分指定SimplePatternFileListFilter。