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

Vic*_*cky 8 java spring-batch spring-batch-admin

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

Col1Name;Col2Name;Col3Name
one;23;20120912
two;28;20120712
Run Code Online (Sandbox Code Playgroud)

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

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

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

<property name="firstLineIsHeader" value="true"/>
Run Code Online (Sandbox Code Playgroud)

此外,这个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>
Run Code Online (Sandbox Code Playgroud)

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

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);        
}

}
Run Code Online (Sandbox Code Playgroud)

谢谢阅读!

Nat*_*ber 13

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

public class MyFlatFileWriter extends FlatFileItemWriter {

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

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

            }
        });
    }
Run Code Online (Sandbox Code Playgroud)

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


Mic*_*low 6

你有没有尝试过

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

  } 
Run Code Online (Sandbox Code Playgroud)