我需要在生成CSV文件时添加SQL查询中定义的别名。
我看到一些使用FlatFileHeaderCallback
的示例,但我没有办法传递别名
有没有办法在[{1}}
的write(List<? extends T> items)
方法中获取列别名
答案 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
:
SELECT
和FROM
之间的字符串,用,
分隔,条带引号等) FlatFileItemWriter
答案 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" />