Spring批处理作业csv文件读取从失败的行恢复

时间:2014-01-30 09:07:24

标签: spring csv spring-batch

读者看起来像这样,

<bean id="cvsFileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">

    <property name="resource" value="classpath:cvs/input/report.csv" />
    <property name="lineMapper">
        <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
            <property name="lineTokenizer">
                <bean
                    class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
                    <property name="names" value="id,impressions" />
                </bean>
            </property>
            <property name="fieldSetMapper">
                <bean
                    class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper">
                    <property name="prototypeBeanName" value="report" />
                </bean>
            </property>
        </bean>
    </property>

</bean>

我想要实现的是,如果在读取CSV文件时读取器/作业失败,那么下一个预定的作业实例应该从上次作业执行失败的行开始读取。我可以跟踪CustomProcessor process()函数中计数器处理的行。

但是任何想法如何从上次执行的失败状态读取csv文件?

我想手动启动/重启失败的作业。我应该如http://thisisurl.com/spring-batch-skip-and-retry所述实现SkipPolicy吗?

(CSV文件也可以是一个大数据库,但是现在我在CSV文件上测试这个场景)

1 个答案:

答案 0 :(得分:1)

如果您的应用程序失败,您可以使用以下内容:

  

但是有没有想过如何从上次执行的失败状态读取csv文件?

将其添加到批处理表 batch_job_execution_params 中保存的jobParameters

在应用程序启动时,在 batch_job_execution 中找到未完成的作业,并在manualy中重新启动。

  

我想手动启动/重启失败的作业。我应该如http://thisisurl.com/spring-batch-skip-and-retry所述实现SkipPolicy吗?

对于restartability,我认为这不是必要的。

如果要在csv中重新启动某些行,只需使用RetryPolicy:

    <batch:step id="processing-step">
        <batch:tasklet>
            <batch:chunk reader="csv_reader"
                         processor="csv_processor"
                         writer="csv_writer"
                         commit-interval="5">
                <batch:retry-policy>
                    <bean class="org.springframework.retry.policy.AlwaysRetryPolicy" scope="step"/>
                </batch:retry-policy>
            </batch:chunk>
        </batch:tasklet>
    </batch:step>

Spring Batch自动处理失败的块(块,其中抛出异常)。 Documentation