【问题标题】:Spring Batch - Passing Resource Name from MultiResourceItemReader > FlatFileItemReader to StepExecutionListenerSpring Batch - 将资源名称从 MultiResourceItemReader > FlatFileItemReader 传递给 StepExecutionListener
【发布时间】:2014-09-09 03:47:49
【问题描述】:

我有一个 Spring Batch 作业需要执行以下操作

  • 检查本地文件系统上可能包含多个文件的目录
  • 处理每个文件,将这些文件中的数据保存到数据库中
  • 通过添加后缀以包含 PROCESSED 或 ERROR 来重命名文件

我用过下面的

  • MultiResourceItemReader 读取文件并委托给 FlatFileItemReader
  • FlatFileItemReader 使用 LineMapperFieldSetMapper 读取数据
  • ItemProcessor 操纵数据读取
  • ItemWriter 写入数据库

我想做什么

  • 根据执行状态在步骤结束时将每个文件重命名为 PROCESSED / ERROR
  • 如何将 FlatFileItemReader 处理的资源文件名传递给 StepExecutionListener
  • 如何将资源文件名传递给 ItemProcessor,因为它还需要保存从中读取数据的文件的名称

下面是我的相关配置

<batch:job id="myJob" job-repository="jobRepository">
    <batch:step id="processFiles">
        <batch:tasklet>
            <batch:chunk reader="multiResourceReader" processor="myItemProcessor" writer="myItemWriter" commit-interval="100" />
        </batch:tasklet>
        <batch:listeners>
            <batch:listener ref="myStepListener"/>
        </batch:listeners>                          
    </batch:step>
</batch:job>

【问题讨论】:

  • 目前正在审查 Luca 的建议和其他实现方式。发现我可以让我需要映射的数据对象 ResourceAware 并且 MultiResourceItemReader 将注入资源。这解决了其中一个问题。

标签: file-io resources spring-batch


【解决方案1】:

此场景类似于this one
我不喜欢第一个解决方案,因为它太混乱了,文件重命名被“隐藏”到 java 代码中,并且无法从作业的 xml 定义中轻松检测到。
我更喜欢解决方案 #2:IMO 成功/错误条件易于检查,步骤流程更清晰且分离得更好。
得到你的考虑,我希望我的建议会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-21
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 2013-07-07
    相关资源
    最近更新 更多