flatfileitemwriter将在重新启动作业之前覆盖这些行

时间:2017-07-14 10:20:05

标签: spring csv spring-batch

正如标题所说,我使用flatfileitemwriter将数据写入csv,当作业正常完成时它运行成功。 但是当我测试“重试”功能时,我遇到了一些问题。

工作配置如下。

<batch:tasklet transaction-manager="resourcelessTransactionManager">
            <batch:chunk reader="myreader" processor="myprocessor" writer="itemWriter"  commit-interval="40" />
        </batch:tasklet>


<bean id="itemWriter" class="org.springframework.batch.item.file.FlatFileItemWriter" scope="step">
    <property name="resource" value="file:C:\\xx\\my.csv" />
    <property name="lineAggregator">
        <bean class="org.springframework.batch.item.file.transform.DelimitedLineAggregator">
            <property name="fieldExtractor">
                <bean class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor">
                    <property name="names" value="a,b,c,d" />
                </bean>
            </property>
        </bean>
    </property>
    <property name="forceSync" value="true" />
</bean>

我让处理器在处理了100条记录之后抛出异常,

if(i++ == 100) {
        throw new ProcessException("any way");
    }

总共有300条记录需要处理。 我运行它的步骤如下。

  1. 当我第一次运行时,它会将第一个0-99记录写入csv,并抛出预期的异常。

    1. 当我第二次运行时,它会将前100-199条记录写入csv,并抛出预期的异常。但89-99的记录已被超越。

    2. 第三次,只是喜欢第二种行为,175-199已被超越。

  2. 我的代码或配置有问题吗?具有nio文件通道的位置编写器不应该像这样工作。如何解决?

0 个答案:

没有答案