Spring flatfileitemwriter将在重新启动作业之前覆盖这些行
正如标题所说,我使用flatfileitemwriter将数据写入csv,当作业正常完成时,它运行成功。 但是我在测试“重试”函数时遇到了一些问题 作业配置如下所示Spring flatfileitemwriter将在重新启动作业之前覆盖这些行,spring,csv,spring-batch,Spring,Csv,Spring Batch,正如标题所说,我使用flatfileitemwriter将数据写入csv,当作业正常完成时,它运行成功。 但是我在测试“重试”函数时遇到了一些问题 作业配置如下所示 <batch:tasklet transaction-manager="resourcelessTransactionManager"> <batch:chunk reader="myreader" processor="myprocessor" writer="itemWriter" c
<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>
总共有300条记录需要处理。
我运行的步骤如下所示
<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>
我的代码或配置有问题吗?具有nio文件通道的position writer不应该这样工作。如何修复它?阅读下面的内容如何。在那里,您将看到一个属性
append
,其默认值为false
。。。现在想象一下,如果您将其切换为true
,可能会发生什么。如果我对任何作业实例使用不同的文件,Append可以修复它,但它没有解决我的问题,因为它是由错误位置计算引起的。它太神奇了,它没有在家中重新出现(Jdk8),唯一不同的是JDK版本,一个是7,任何其他文件都是8。只有在使用同一文件时,Ehrm append才会起作用。如果您为每个作业实例使用不同的文件(假设您指的是Spring Batch中的作业实例内容),则根本没有意义。Append不起作用,因为文件通道的光标已恢复到wirte(列表)之前方法doOpen()上的错误位置。但是谢谢你。