【问题标题】:int-ftp:inbound-channel-adapter is retriving old filesint-sftp:inbound-channel-adapter 正在检索旧文件
【发布时间】:2017-10-10 13:53:59
【问题描述】:

我们正面临一个相当奇怪的问题。

我们已经在 xml 中配置了 ftp 入站通道适配器。它使用 DefaultFtpSessionFactory、FtpPersistentAcceptOnceFileListFilter 和 PropertiesPersistingMetadataStore。 MetadataStore 配置位于另一个 xml 文件中。

现在,我们按照配置每周获取一次文件。突然,它开始获取 9-10 个月大的文件。 4 到 5 周后,它会继续从原来的位置获取新文件。然后再次旧文件并返回新文件。这种来回已经持续了一段时间,而且总是连续的。

此外,元数据文件已经有一段时间没有更新了。

远程文件不会被删除,但本地文件在处理后会移动到存档。

您能说明一下可能性吗?

编辑 经过更多调查,poller 似乎也有问题。 int:poller 每周五晚上 11 点都有 cron。

文件不会在每次投票时转移到本地目录,而是在几个月内批量转移一次。

轮询器在每个星期五按预期选择 1 个文件并将其传递给 spring JobLauncher。

预期的行为是每个星期五,将有 1 个文件传输到本地目录,然后由 JobLauncher 处理。这个文件是一大早就写在远程服务器上的。

【问题讨论】:

    标签: ftp spring-integration


    【解决方案1】:

    默认情况下,PropertiesPersistingMetadataStore 仅在应用程序正常关闭时刷新到磁盘。

    请参阅过滤器上的setFlushOnUpdate()

    /**
     * Determine whether the metadataStore should be flushed on each update (if {@link Flushable}).
     * @param flushOnUpdate true to flush.
     * @since 4.1.5
     */
    public void setFlushOnUpdate(boolean flushOnUpdate) {
        this.flushOnUpdate = flushOnUpdate;
    }
    

    【讨论】:

    • 但是今天我重启了tomcat服务,仍然没有任何变化。行数或文件修改日期。属性文件已于 6 月更新。已获取两次的文件之一存在于属性文件中,但其中没有文件。究竟是什么刷新到属性文件?已读取的所有文件还是上次读取的文件?
    • 存储保存属性文件的内存映射;当应用程序上下文通常为close()d 时,整个映射被刷新(通过DisposableBean.destroy()。当fliushOnUpdate 在过滤器中为真时,每次添加新文件时都会刷新映射。请注意,过滤器将通过如果文件的时间戳发生变化,则文件。
    • 感谢您的详细回复。我检查了 ftp 服务器,文件没有更新。所有文件都附加了创建日期并且与修改日期相同。由于我们没有明确调用 close(),我假设 spring boot/tomcat 调用它。服务重新启动,日志文件中没有任何错误。问题仍然存在。
    • 如果是web应用上下文; Tomcat应该正常关闭它。如果你能用一个小测试用例重现它,我们可以看看。
    • 是的,它是一个 Web 应用程序上下文。我正在尝试为其创建测试,但尚未成功。可能是测试环境下的复制参数不一样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-24
    • 2017-08-29
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多