【问题标题】:Spring Batch moving file after processingSpring Batch 处理后移动文件
【发布时间】: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


【解决方案1】:

听众。 Spring Batch 有一个侦听器集合,用于将这种类型的逻辑注入到您可能需要的步骤或作业的几乎任何点中。根据发现错误的位置将指示哪个侦听器是合适的。例如,如果在读取过程中发现错误,则实现ItemReadListener#onReadError 方法将是有意义的。通常,这种类型的逻辑通常通过实现正确的侦听器来处理,以便在流程中的正确位置执行所需的逻辑。

您可以在此处的参考文档中阅读有关 Spring Batch 提供的一些侦听器的更多信息:https://docs.spring.io/spring-batch/reference/html/configureStep.html#interceptingStepExecution

【讨论】:

    猜你喜欢
    • 2016-06-29
    • 2018-09-17
    • 1970-01-01
    • 1970-01-01
    • 2012-05-23
    • 2017-07-14
    • 2020-04-27
    • 2012-10-02
    • 2018-05-22
    相关资源
    最近更新 更多