我试图通过在我的自定义编写器调用中实现标头回调和footercallback在自定义编写器中添加页眉和页脚 .
写方法成功 . 但是不会调用write header和writefooter .
public class CustomOAFileItemWriter extends StepExecutionListenerSupport implements ItemWriter<OAExtract>,FlatFileHeaderCallback,FlatFileFooterCallback{
public void write(List<? extends OAExtract> oaExtractList) throws Exception {
FileOutputStream fs = new FileOutputStream("C:\\archivedFiles\\out.bin");
}
public void writeHeader(Writer writer) throws IOException {
System.out.println("Writing Header record");
}
public void writeFooter(Writer writer) throws IOException {
System.out.println("Writing Footerrecord");
}
拥有Spring批次经验的人可以帮助我吗?
谢谢,赖
2 回答
您的解决方案与SB理念相反:重用和委派 . 你没有使用它们 .
您不需要自定义
ItemWriter
但是使用自定义页眉/页脚回调创建FlatFileItemWriter
创建您想要的侦听器(我看到您扩展
StepExecutionListenerSupport
)并附加到您的步骤 .如果查看FlatFileItemWriter的源代码,您将看到它在doOpen()处调用头调用方法,在doClose()处调用footer callback方法 . 由于您没有使用标准的FlatFileItemWriter,因此您将在FlatFileItemWriter中编写显式代码 .
http://grepcode.com/file/repo1.maven.org/maven2/org.springframework.batch/spring-batch-infrastructure/3.0.1.RELEASE/org/springframework/batch/item/file/FlatFileItemWriter.java#FlatFileItemWriter