【问题标题】:Is there anyway to avoid processing same file twice with Spring Batch?有没有办法避免使用 Spring Batch 两次处理同一个文件?
【发布时间】:2020-04-23 09:22:50
【问题描述】:

我正在开发 3 步 Spring Batch 项目。首先从ftp下载需要的文本文件到本地,然后处理,最后每隔10分钟删除本地目录下的文件。并且每 10 分钟就会在 FTP 中加载新文件。如果 FTP 出现问题并且无法加载新文件怎么办?然后 Spring Batch 项目下载相同的文件并再次处理。所以我的问题是如何避免 Spring Batch 两次处理同一个文件?

编辑:我使用 Apache 公共库从 FTP 下载文件。 我使用 MultiResourceItemReader 在每次运行时提取 2 个文本文件。

【问题讨论】:

    标签: spring spring-batch batch-processing


    【解决方案1】:

    我会使用文件名作为作业参数。这将为每个文件创建一个作业实例。

    现在,由于 Spring Batch 会阻止多次运行同一作业实例以完成,因此每个文件将只处理一次,您可以通过设计避免两次处理同一文件。

    【讨论】:

    • 你能举个例子吗?如果我在 step1(Dowloading file from ftp) tasklet 中获取文件名,如何将文件名用作作业参数?
    • 好吧,如果你知道在步骤 1 中要下载哪个文件,你可以将其名称作为参数传递给作业,并在步骤 1 中获取。
    • 我可以为此目的使用执行上下文吗?
    • 不需要执行上下文,可以通过提供的chunkContext:chunkContext.getStepContext().getJobParameters()在step1的tasklet中获取job参数。
    • 伙计,谢谢大家。但实际上我是 Spring Batch 的新手。因此我对 Spring Batch 的这一部分没有想象。那么我如何在步骤1中传递参数?如果有的话,你能分享任何类似的资源代码来看看和理解吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-07
    • 1970-01-01
    • 2018-10-16
    • 1970-01-01
    • 2019-05-29
    相关资源
    最近更新 更多