I went through Is there a way to override and not execute the headerCallBack in Spring Batch, but still not clear on the solution. I'm using Spring XML based approach in my project.
I'm using ClassifierCompositeItemWriter to segregate the data based on one column and writing it to four different files (off-course unique data in each file).
Sometime I've observed that one file is empty because there is no data to qualify that Classifier, what I want to prevent writing headers into that file and have a pure empty file in case of no data.
<bean id="someCvsWriter" class="org.springframework.batch.item.file.FlatFileItemWriter">
<property name="resource" value="file:csv/someReport.csv"/>
<property name="shouldDeleteIfExists" value="true"/>
<property name="encoding" value="UTF-8"/>
<property name="lineAggregator" ref="someCustomLineAggregator"/>
<property name="headerCallback" ref="someReportHeaderCallback" />
</bean>
Header Callback
public class SomeReportFlatFileHeaderCallback implements FlatFileHeaderCallback {
@Override
public void writeHeader(Writer writer) throws IOException {
writer.write("COL1, COL2, COL3");
}
}