Spring Batch - 从MultiResourceItemReader传递资源名称> FlatFileItemReader到StepExecutionListener

时间:2014-07-18 05:14:42

标签: file-io resources spring-batch

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

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

我使用了下面的

  • MultiResourceItemReader ,用于读取文件并委托给 FlatFileItemReader
  • FlatFileItemReader 使用 LineMapper FieldSetMapper
  • 读取数据
  • 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>

1 个答案:

答案 0 :(得分:0)

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