【问题标题】:How to read the Files generating at remote location, process and move to another location by using spring batch?如何使用spring批处理读取在远程位置生成的文件,处理并移动到另一个位置?
【发布时间】:2021-07-08 07:34:20
【问题描述】:

谁能建议我需要遵循的方法来实现以下要求?

背景:

  1. 有一个远程位置,例如 "//severname/somefolder/somefile"。有些文件会在远程位置每隔一秒或一分钟连续生成。

  2. 应要求 Spring Boot 应用程序不断检查在远程位置生成的新文件(通过某些调度程序)。

  3. 如果文件可用,我需要一个一个读取最旧到最新的文件并处理它们可能存储到数据库中。

  4. 处理后,需要从现有远程位置删除特定文件并移动到另一个远程位置文件夹。

我的想法:

  1. 通过使用 spring 批处理,我们可以一次读取一个文件。但是我们如何动态读取最旧的文件呢?

  2. 如何处理这样的场景:如果我的批处理正在处理其中一个文件仍在进行中。如果计划再次运行作业,则有可能选择相同的文件进行处理。

感谢您的解决方案和更好的建议:)

【问题讨论】:

    标签: spring spring-boot spring-batch spring-batch-stream


    【解决方案1】:

    轮询目录并为每个传入文件运行作业是一种常见的模式,可以通过结合使用 Spring Batch 和 Spring Integration 来实现。您可以在参考文档的Launching Batch Jobs through Messages 部分找到有关如何实现此模式的详细说明。

    通过使用 spring 批处理,我们可以一次读取一个文件。但是我们如何动态读取最旧的文件呢?

    这取决于您决定如何启动作业。如果您决定为每个文件运行不同的作业,则启动作业的代码可以根据需要对文件进行排序,并以正确的顺序依次启动作业。例如,如果您决定为带有 MultiResourceItemReader 的所有文件运行一个作业,那么您可以提供一个 Comparator 来根据需要对文件进行排序,请参阅 MultiResourceItemReader#setComparator

    如何处理这样的场景:如果我的批处理正在处理其中一个文件仍在进行中。如果计划再次运行作业,则有可能选择相同的文件进行处理。

    这取决于您使用的调度工具,即它是否支持并发作业执行等。如果文件为@987654325,轮询目录并将作业请求放入队列中的模式将通过设计解决此问题@ 已成功提交到队列被(重新)从远程目录中移出(即后续轮询不会看到它,也不会为其创建重复请求)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-09
      • 2018-03-14
      • 2016-04-09
      • 1970-01-01
      • 2013-01-01
      • 2013-03-18
      • 2021-12-15
      相关资源
      最近更新 更多