如何将列别名添加到输出 csv 文件 spring 批处理
How to add column alias names to output csv file spring batch
我需要在生成 CSV 文件时添加 SQL 查询中定义的别名。
我看到一些使用 FlatFileHeaderCallback
的例子,但我没有办法传递别名
有什么方法可以在 FlatFileItemWriter
的 write(List<? extends T> items)
方法中获取列别名
对于初学者,我认为您可以简单地使用一个自定义的 FlatFileHeaderCallback
,它将一个字符串作为参数并将其写入:
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
中声明它并给它一个字符串,其中包含您的 columns/aliases 的名称,由您的平面文件定界符分隔:
<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>
现在,我想你不想为 header 写第二次 columns/aliases,而想从 SQL 中写 "extract"询问。这可以通过摆弄 CustomHeaderWriter
:
来实现
- 不是直接传递 columns/aliases,而是给它实际的 SQL 查询
- 使用正则表达式或手动解析,然后您可以提取别名或列名(
SELECT
和 FROM
之间的字符串、用 ,
拆分、去掉引号等.)
- 然后您需要传递(或使用常量)
FlatFileItemWriter
的分隔符
- 最后,写入刚刚构建的字符串
创建自定义 class(假设有 5 个 csv 列):
public class MyFlatFileWriter implements FlatFileHeaderCallback {
@Override
public void writeHeader(Writer writer) throws IOException {
writer.write("Col1,Col2,Col3,Col4,Col5");
}
}
在 writer bean 中添加 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" />
我需要在生成 CSV 文件时添加 SQL 查询中定义的别名。
我看到一些使用 FlatFileHeaderCallback
的例子,但我没有办法传递别名
有什么方法可以在 FlatFileItemWriter
write(List<? extends T> items)
方法中获取列别名
对于初学者,我认为您可以简单地使用一个自定义的 FlatFileHeaderCallback
,它将一个字符串作为参数并将其写入:
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
中声明它并给它一个字符串,其中包含您的 columns/aliases 的名称,由您的平面文件定界符分隔:
<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>
现在,我想你不想为 header 写第二次 columns/aliases,而想从 SQL 中写 "extract"询问。这可以通过摆弄 CustomHeaderWriter
:
- 不是直接传递 columns/aliases,而是给它实际的 SQL 查询
- 使用正则表达式或手动解析,然后您可以提取别名或列名(
SELECT
和FROM
之间的字符串、用,
拆分、去掉引号等.) - 然后您需要传递(或使用常量)
FlatFileItemWriter
的分隔符
- 最后,写入刚刚构建的字符串
创建自定义 class(假设有 5 个 csv 列):
public class MyFlatFileWriter implements FlatFileHeaderCallback {
@Override
public void writeHeader(Writer writer) throws IOException {
writer.write("Col1,Col2,Col3,Col4,Col5");
}
}
在 writer bean 中添加 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" />