【发布时间】:2017-01-18 05:40:48
【问题描述】:
我是 Spring 批处理的新手。
我必须从一个文件夹中读取多个文件(分隔符)并将它们加载到数据库中。我做到了。
但我的问题是处理完每个文件后,我必须将文件移动到 processed 文件夹或将错误记录移动到 Error 文件夹。
例如,如果我处理来自多个文件的以下文件 (abc.txt):
D|hello1|123
D|hello2|three - Error
D|hello3|123
我知道第二条记录是错误的。
现在我必须将错误文件(abc-error.txt)中的错误记录写入错误文件夹并继续下一条记录。成功处理文件排除错误记录后,我需要将abc.txt 移动到已处理的文件夹中。
我怎样才能达到上述要求?
我的工作:
<batch:job id="file_to_db">
<batch:step id="step1">
<batch:tasklet ref="moveFiletoTmpFolder" />
<batch:end on="FAILED"/>
<batch:next on="*" to="step2" />
</batch:step>
<batch:step id="step2">
<batch:tasklet transaction-manager="transactionManager"
start-limit="100">
<batch:chunk reader="multiResourceReader" writer="databaseItemWriter"
commit-interval="100">
</batch:chunk>
</batch:tasklet>
</batch:step>
</batch:job>
<bean id="multiResourceReader"
class=" org.springframework.batch.item.file.MultiResourceItemReader">
<property name="resources" value="file:batch/csv/processing/*.csv" />
<property name="delegate" ref="cvsFileItemReader" />
</bean>
工作不是一步。但是每个文件一旦被处理就必须被移动。
对于每个文件,错误记录必须写入一个名为filename-error.txt 的单独文件中。
【问题讨论】:
-
是单步作业吗?如果可能,请显示您的工作和步骤配置。
-
Teja,您可以通过添加另一个步骤来完成移动部分的任务。请参阅此处的“archiveFileTasklet”部分:javaworld.com/article/2458888/spring-framework/…
-
@Guest,Tasklet 用于执行一次操作。但对我来说,从许多文件中读取每个文件后,我需要将文件移动到不同的文件夹。
标签: spring-batch batch-processing