java - Spring 批 : Writing column names as first line in flat file

标签 java spring-batch spring-batch-admin

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

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

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

如何通过header回调来实现?

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

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

此外,这 Jira Issue表示我想要的已实现并关闭。但是,我找不到任何将第一行写为列名的示例。

<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>

我的 Item Writer 如下所示:

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配置类属性中使用这个类

关于java - Spring 批 : Writing column names as first line in flat file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12388046/

相关文章:

java - 在Java中使用正则表达式获取特殊字符之间的字符串

java - Java 中的游戏 : rotating selected object

java - 在 Java 中使用什么框架进行高级作业调度?

java - Spring Batch 管理控制台 - com.thoughtworks.xstream.mapper.CannotResolveClassException "class : java.util.HashMap"

java - 可以 `greetSomeone("world")` be replaced by `greetSomeone(name)`吗?此更改有任何副作用吗?

java - 如何通过 maven-failsafe-plugin 运行基于 spring-boot 的应用程序的集成测试?

Spring批处理尝试再次创建持久的批处理作业存储库

spring - Spring Batch 中的executionContexts 的困惑

java - ItemReader 返回一个包含整行作为字符串的 FlatFileItemReader

java - 如何查找以前运行的作业/任务未在 Spring Batch 中运行?我尝试了一些代码但不确定