繁体   English   中英

Spring批处理:将列名称作为平面文件中的第一行

[英]Spring batch: Writing column names as first line in flat file

我想创建一个具有以下格式的平面文件:

Col1Name;Col2Name;Col3Name
one;23;20120912
two;28;20120712

如图所示,平面文件中的第一行是列名。

如何通过头回调实现这一目标?

我看到如果输入文件的格式是以上格式,则有一个选项可以忽略第一行:

<property name="firstLineIsHeader" value="true"/>

此外,这个Jira问题表明我想要的是实施和关闭。 但是,我无法找到将第一行写为列名的任何示例。

<beans:bean id="MyFileItemWriter" class="com.nik.MyFileItemWriter" scope="step">
    <beans:property name="delegate">
        <beans:bean class="org.springframework.batch.item.file.FlatFileItemWriter">
            <beans:property name="resource" value="file:MYFILE.dat" /> 

            <beans:property name="lineAggregator">
                <beans:bean class="org.springframework.batch.item.file.transform.DelimitedLineAggregator">
                    <beans:property name="delimiter" value=";" />
                    <beans:property name="fieldExtractor">
                        <beans:bean class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor">
                            <beans:property name="names" value="Col1Name, Col2Name, Col3Name" />
                        </beans:bean>
                    </beans:property>
                </beans:bean>
            </beans:property>
            <beans:property name="headerCallback" ref="MyFileItemWriter" />
        </beans:bean>
    </beans:property>
</beans:bean>

我的项目编写者如下所示:

public class MyFileItemWriter implements ItemWriter<MyBean>, FlatFileHeaderCallback, ItemStream{

private FlatFileItemWriter<MyBean> delegate;    

 public void setDelegate(final FlatFileItemWriter<MyBean> delegate) {
        this.delegate = delegate;
    }

public void writeHeader(Writer writer) throws IOException {


}

public void write(List<? extends MyBean> items) throws Exception {
    this.delegate.write(items);

}

public void close() throws ItemStreamException {
     this.delegate.close();

}

public void open(ExecutionContext arg0) throws ItemStreamException {
     this.delegate.open(arg0);

}

public void update(ExecutionContext arg0) throws ItemStreamException {
     this.delegate.update(arg0);        
}

}

谢谢阅读!

创建一个自定义类,扩展FlatFileItemWriter并仅实现构造函数:

public class MyFlatFileWriter extends FlatFileItemWriter {

    public MyFlatFileWriter (){
        super.setHeaderCallback(new FlatFileHeaderCallback() {

            public void writeHeader(Writer writer) throws IOException {
                writer.write("Col1Name,Col2Name,Col3Name");

            }
        });
    }

然后在bean配置类属性中使用此类

你有没有尝试过

  public void writeHeader(Writer writer) throws IOException {
      //... e.g. writer.write("my first line");

  } 

FlatFileItemWriter为您提供添加标头回调的选项

在将第一个项目写入文件之前将调用headerCallback。

因此,您需要通过实现FlatFileHeaderCallback来实现Header Callback

使用默认实施

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM