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

读者看起来像这样,

<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)

2 years ago

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

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

将它添加到jobParameters,它们保存在批处理表 batch_job_execution_params 中 .

在应用程序启动时,在 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 .