如何添加列别名以输出csv文件spring批处理

时间:2016-01-14 22:47:22

标签: java spring spring-batch

我需要在生成CSV文件时添加SQL查询中定义的别名。

我看到一些使用FlatFileHeaderCallback的示例,但我没有办法传递别名

有没有办法在[{1}}

write(List<? extends T> items)方法中获取列别名

2 个答案:

答案 0 :(得分:2)

对于初学者,我认为您可以简单地使用自定义FlatFileHeaderCallback,它将String作为参数并写入:

public class CustomHeaderWriter implements FlatFileHeaderCallback {

    private String header;

    @Override
    public void writeHeader(Writer writer) throws IOException {
        writer.write(header);
    }

    public void setHeader(String header) {
        this.header = header;
    }
}

要使用它,请在FlatFileItemWriter中声明它并为其指定一个字符串,其中包含由平面文件分隔符分隔的列/别名的名称:

<bean class="org.springframework.batch.item.file.FlatFileItemWriter" scope="step">
   <property name="headerCallback">
       <bean class="xx.xx.xx.CustomHeaderWriter">
           <property name="header" value="${columns.or.aliases}"></property>
        </bean>
   </property>
</bean>

现在,我想你不想第二次为标题写下列/别名,并希望&#34;提取&#34;他们来自SQL查询。这可以通过摆弄CustomHeaderWriter

来实现
  • 您可以直接传递列/别名,而不是直接传递列/别名
  • 使用正则表达式或手动解析,您可以提取别名或列名称(SELECTFROM之间的字符串,用,分隔,条带引号等)
  • 然后您需要传递(或使用常量)FlatFileItemWriter
  • 的分隔符
  • 最后,编写刚构建的String

答案 1 :(得分:1)

创建一个自定义类(假设有5个csv列):

public class MyFlatFileWriter implements FlatFileHeaderCallback {

 @Override
 public void writeHeader(Writer writer) throws IOException {
    writer.write("Col1,Col2,Col3,Col4,Col5");
}
}

添加bean&amp;它在writer bean中的引用:

    <bean id="flatFileWriter" class="org.springframework.batch.item.file.FlatFileItemWriter">
      <property name="resource" value="file:csv/outputs/name.csv" />
      <property name="headerCallback" ref="headerCallback" />
      <property name="lineAggregator">
       ............
      </property>
    </bean>

<bean id="headerCallback" class="com.whatever.model.MyFlatFileWriter" />