2015-09-17 12 views
0

我想通过在自定义编写器调用中实现标题回调和footercallback来在自定义书写器中添加页眉和页脚。带有FooterCallback和Header回调的Spring批量自定义书写器

写入方法成功。但是写头和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批处理体验的人可以帮助我吗?

感谢, 清莱

+0

检查FlatFileItemWriter代码,并期待在这些回调被调用。我想,它们是从打开和关闭方法(ItemStream接口)调用的。所以,这是FlatFileItemWriter类本身的一个特性,而不是一般的框架特性。这意味着,你必须在自己的作家中实现自己。 –

+0

我试图修改FlatFileItemWriter的写入字节的实现。 但outputBufferWriter只写入String,int和char []。 我需要写一个字节{}。你能帮忙吗? 公共无效写入(字节[] BS)抛出IOException异常{ \t \t \t如果(初始化!){ \t \t \t \t initializeBufferedWriter(); \t \t \t} \t \t \t outputBufferedWriter.write(BS); \t \t \t outputBufferedWriter.flush(); \t \t} –

+0

这实际上是一个与TransactionAwareBufferedWriter弹簧问题。 这不包含可以写入字节的方法。 –

回答

0

您的解决方案是相反SB理念:重用和代表团。而且你没有使用它们。
你不需要自定义ItemWriter

  1. 与您的自定义页眉/页脚回调
  2. 创建FlatFileItemWriter创建要(我看你延长StepExecutionListenerSupport),并连接到您的一步听众。
+0

我无法使用FlatFileItemWriter,因为我需要编写一个二进制文件而不是普通的文本文件。数据包含EBCDIC comp3字段,FlatFileItemWriter将其写为文本。当我将它移动到大型机(最终用户)时,comp3字段正在改变。 我会尝试实现ItemStream接口并让你知道它是如何发生的。 –

相关问题