我正在尝试使用Spring Batch FlatFifileItemWriter将java数据对象写入.csv文件,完全如下面位置示例中所述。 http://www.mkyong.com/spring-batch/spring-batch-example-xml-file-to-csv-file/
编写器配置如下所示。
<bean id="cvsFileItemWriter" class="org.springframework.batch.item.file.FlatFileItemWriter">
<!-- write to this csv file -->
<property name="resource" value="file:cvs/report.csv" />
<property name="shouldDeleteIfExists" value="true" />
<property name="lineAggregator">
<bean
class="org.springframework.batch.item.file.transform.DelimitedLineAggregator">
<property name="delimiter" value="," />
<property name="fieldExtractor">
<bean
class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor">
<property name="names" value="refId, name, age, csvDob, income" />
</bean>
</property>
</bean>
</property>
</bean>
由于FlatFileItemWriter在API中有以下write()方法定义,即使LineAggregator返回空String,它仍然会写入文件。
StringBuilder lines = new StringBuilder();
int lineCount = 0;
for (T item : items) {
lines.append(lineAggregator.aggregate(item) + lineSeparator);
lineCount++;
}
try {
state.write(lines.toString());
}
如果在使用spring batch写入java中的csv文件时该行为空,有没有办法将其配置为跳过。
答案 0 :(得分:0)
您希望在步骤中添加ItemProcessor<YourObject>
。在其中,您可以添加一个简单的YourObject process(YourObject item)
方法来检查对象是否会产生空行。如果没有,请返回该对象。如果是,请返回null
。
这会阻止您要放弃的项目进入作者,并且当您查看该步骤的FILTER_COUNT
表时会增加BATCH_STEP_EXECUTION
。
有关filtering objects的更多信息,请参阅Spring Batch文档。
修改:您的答案中的教程you referenced也包含了过滤处理器(FilterReportProcessor
)的示例。