【问题标题】:Spring batch job start processing file not fully uploaded to the SFTP serverSpring批处理作业启动处理文件未完全上传到SFTP服务器
【发布时间】:2017-01-30 12:44:10
【问题描述】:

我有一个 spring-batch 作业以给定的时间间隔扫描 SFTP 服务器。当它找到一个新文件时,它开始处理。

它在大多数情况下都可以正常工作,但有一种情况不起作用:

  1. 用户开始将新文件上传到 SFTP 服务器
  2. 批处理作业检查服务器并找到新文件
  3. 它开始处理它

但是由于文件还在上传中,所以在处理过程中遇到了input block的unexpected end of input block,报错。

如何在批处理作业开始之前检查文件是否已完全上传到 SFTP 服务器?

【问题讨论】:

    标签: spring spring-integration spring-batch spring-integration-sftp


    【解决方案1】:

    上传时锁定文件/上传到临时文件名

    您可能有一个监控远程文件夹的自动化系统,并且您希望防止它意外选择尚未完成上传的文件。由于大多数 SFTP 和 FTP 服务器(WebDAV 除外)不支持文件锁定,否则您需要防止自动化系统选择文件。

    常见的解决方法是:

    1. 数据文件上传完成后上传“完成”文件并 自动化系统在处理之前等待“完成”文件 数据文件。这是一个简单的解决方案,但不适用于多用户 环境。

    2. 将数据文件上传到临时(“上传”)文件夹,并在上传完成后自动将它们移动到目标文件夹。

    3. 将数据文件上传到不同的临时名称,例如使用 .filepart 扩展名,并在上传完成后自动重命名它们。让自动化系统忽略 .filepart 文件。

    来自here

    【讨论】:

      【解决方案2】:

      我们遇到了类似的问题,我们的解决方案是,我们将 spring-batch cron 触发器配置为每 10 分钟触发一次作业(尽管我们可以配置为 5 分钟,因为文件传输花费的时间不到 3 分钟),然后我们读取/处理所有10 分钟之前创建的文件。我们假设 FTP 操作在 3 分钟内完成。这给了我们一些额外的灵活性,例如当 spring-batch 应用程序关闭时等。

      例如,如果批处理作业在上午 10:20 触发,我们会读取在上午 10:10 之前创建的所有文件,同样,在 10:30 运行的作业会读取在 10:20 之前创建的所有文件。

      注意:一旦阅读,您需要删除或移动到历史文件夹以进行重复阅读。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多