【发布时间】:2014-09-09 03:47:49
【问题描述】:
我有一个 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>
【问题讨论】:
-
目前正在审查 Luca 的建议和其他实现方式。发现我可以让我需要映射的数据对象 ResourceAware 并且 MultiResourceItemReader 将注入资源。这解决了其中一个问题。
标签: file-io resources spring-batch