【问题标题】:How to make Spring Integration FTP Inbound Channel Adapter's local filter use the remote filter as default如何使 Spring Integration FTP Inbound Channel Adapter 的本地过滤器默认使用远程过滤器
【发布时间】:2017-06-26 08:19:18
【问题描述】:

对于 Spring Integration FTP Inbound Channel Adapter,如果我没有明确设置local-filter,是否可以使用远程过滤器的默认值?

<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>

例如在我的用例中,远程目录包含abc_201701.txtabc_201702.txt 等,filename-pattern="abc_2017*.txt" 模式将让我成功下载所有这些文件。但是,如果我的本地目录包含附加文件,例如 def.txt,则将生成所有 3 个文件 abc_201701.txtabc_201702.txtdef.txt Messages。

我认为,如果本地过滤器默认尊重远程过滤器(如果我没有明确设置),则更有意义,即只会生成 2 条消息 abc_201701.txtabc_201702.txt

【问题讨论】:

    标签: spring-integration


    【解决方案1】:

    IMO 这个建议令人困惑。远程过滤器基于远程实体,但在File 对象上是本地的。另外,我们有localFilenameGeneratorExpression,其中本地名称可能与远程无关,因此任何将filename-pattern 复制到本地版本都会很奇怪。此外,这个想法仅对基于名称的过滤器有很大的限制。这在Reference Manual 为什么我们需要local-filter 以及默认情况下如何使用FileSystemPersistentAcceptOnceFileListFilter 中有明确描述。

    OTOH 不负责处理 local-directory 中的意外内容。本地部分只是普通的FileReadingMessageSource - http://docs.spring.io/spring-integration/reference/html/files.html#file-reading。因此,它期望目录中的任何文件是很自然的。

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

    【讨论】:

    • 同意 - 删除了我的答案。
    • 我为什么提出这个问题与我的用例有关。我在 ftp 中有 1 个不断更新的远程文件。对于每次轮询,我都会下载文件并触发 diff 程序生成 delta 文件(可能在文件名后缀带有时间戳),并将其存储在下载目录的同一目录中。如果我不设置本地过滤器,FileReadingMessageSource 将重复生成增量文件和带有时间戳的后缀(不仅仅是基于远程 ftp 文件生成增量)。即abc.txt.20170626、abc.txt.20170626.20170626、abc.txt.20170626.20170626.20170626等
    • 作为一个普通的 SI 用户,我可能只配置 属性的子集。我可能希望,如果我只是设置文件名模式并下载文件(即不设置 local-fitler),事件的生成将与下载的文件相同。这就是为什么我问 lcoal-filter 是否应该尊重远程文件过滤器作为默认值以避免意外。无论如何,我同意Artem的解释。
    • 嗯,这就是你的用例。而且它看起来并不简单。那么,现有推荐遵循什么问题并指定适当的本地过滤器,即使它可能具有相同的模式语义?正如我所说:你很不幸你的逻辑是基于感觉像继承能力的模式,但问题有点广泛,在Java配置的情况下,我们必须为远程部分指定FtpSimplePatternFileListFilterSimplePatternFileListFilter本地。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-21
    • 2018-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多