正如标题所说,我使用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条记录需要处理。 我运行它的步骤如下。
当我第一次运行时,它会将第一个0-99记录写入csv,并抛出预期的异常。
当我第二次运行时,它会将前100-199条记录写入csv,并抛出预期的异常。但89-99的记录已被超越。
第三次,只是喜欢第二种行为,175-199已被超越。
我的代码或配置有问题吗?具有nio文件通道的位置编写器不应该像这样工作。如何解决?