【问题标题】:FTP file download order with Spring integration使用 Spring 集成的 FTP 文件下载顺序
【发布时间】:2017-01-15 21:25:13
【问题描述】:

我正在使用 spring 集成从 SFTP 服务器下载一组 PDF 和 XML 文件。该过程由基于 cron 的轮询器触发。我需要确保在同一个远程目录中的 PDF 文件之前完全下载所有 XML 文件。 我不想使用两个不同的 cron 作业来触发这些。 我该如何解决这个问题?提前致谢。 (注意:我是集成框架的新手)

【问题讨论】:

    标签: spring ftp spring-integration


    【解决方案1】:

    filter 属性中使用自定义FileListFilter(将FTPFile 用于FTP,将LsEntry 用于SFTP 作为参数化的泛型类型)。

    filterFiles 方法中,将候选文件列表排序为您希望它们下载的顺序。

    【讨论】:

    • 非常感谢@garry,您的解决方案在从 SFTP 导入之前对文件进行了排序。但是在导入之后,我会为每个文件触发 spring 批处理作业。由于批处理作业由一组执行程序并行执行,因此似乎无法维持顺序。当我将执行者的数量减少到 1 时,订单仍然保留。
    • 我不确定你的意思;如果在对应的 XML 完全到达之前不发布 PDF,处理顺序有什么不同?
    • 感谢您的快速回复。我检查了我的代码,看起来从 SFTP 传递到通道后,排序顺序没有得到维护。我已经在描述中粘贴了代码的主要部分。你能指出这里有什么问题吗?
    • 啊,是的;还有一个本地过滤器(你有)。同步器过滤器控制下载顺序,但文件可能以不同的顺序在本地磁盘上找到。您还需要自定义本地过滤器以进行排序。
    • 我也自定义了本地过滤器,但输出仍然显示不同的顺序。当我调试过滤器时,它似乎工作正常(它按预期排序),但之后顺序发生了变化。顺便说一句,我可以使用resequencer 以某种方式保留排序顺序吗?如果可以,你能提供一些链接来试试吗?
    【解决方案2】:

    我建议计算目录中的文件数,然后循环使用它。要查看 UNIX 系统上的文件数量,可以使用以下命令:

    ls -1fa | wc -l
    

    下载所有 XML 后,您可以触发另一种方法开始下载 PDF 文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-25
      相关资源
      最近更新 更多