我是Spring批次的新手。
我必须从文件夹中读取多个文件(分隔符)并将其加载到DB中。我做了什么。
但我的问题是在处理完每个文件后我必须将文件移动到string file = "E:\\CoachingClassImages\\HeaderInfoImages\\Logo" + logo_picname;
string extention=Path.GetExtension(file);
string tempFileName = string.Format("{0}({1}){2}", logo_picname,count++, extention);
// will give you the file name as Img(3).jpg if count is 3
文件夹或错误记录到processed
文件夹。
例如,如果我从多个文件处理下面的文件(Error
):
abc.txt
我知道第2条记录是错误的。
现在我必须将错误文件(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>
的单独文件中。
答案 0 :(得分:1)
监听。 Spring Batch有一组监听器,用于将这种类型的逻辑注入到您可能需要的步骤或作业的任何一点。根据发现错误的位置,将指示哪个侦听器是合适的。例如,如果在读取期间发现错误,则实现ItemReadListener#onReadError
方法是有意义的。通常,这种类型的逻辑通常通过实现正确的侦听器来处理,以在进程中的正确点执行所需的逻辑。
您可以在参考文档中阅读有关Spring Batch提供的一些监听器的更多信息:https://docs.spring.io/spring-batch/reference/html/configureStep.html#interceptingStepExecution