我正在使用spring-batch来创建基于数据库数据的平面文件报告。平面文件的格式类似于
下面的格式 HEADER1(文件名)
HEADER2(包含记录数)
HEADER3(列名)
RECORD1
RECORD2
RECORDN
页脚
我正在使用FlatFileHeaderCallback和FlatFileHeaderCallback接口来相应地编写页眉和页脚。我可以在FOOTER中插入行计数,但是当我试图在Header中写入它时,它会停止0。
FileWriter的:
private String templateDelimiter;
private String fileName;
private int rowCount = 0;
private String headerTemplate;
private String footerTemplate;
private String columnHeaders;
private Map<String, String> templateProps;
private FlatFileItemWriter<String[]> delegate;
public void writeFooter(Writer writer) throws IOException {
if (footerTemplate != null) {
initializeTemplateProps();
templateProps.put(Constant.TEMPLATE_DELIMITER + Constant.ROWCOUNT + Constant.TEMPLATE_DELIMITER, "" + rowCount);
writer.write(TextTemplate.merge(footerTemplate, templateProps));
}
}
public void writeHeader(Writer writer) throws IOException {
if (headerTemplate != null) {
initializeTemplateProps();
writer.write(TextTemplate.merge(headerTemplate, templateProps));
}
}
protected void initializeTemplateProps() {
if (templateProps == null) {
templateProps = new HashMap<String, String>();
templateProps.put(Constant.TEMPLATE_DELIMITER + Constant.FILENAME + Constant.TEMPLATE_DELIMITER, fileName);
templateProps.put(Constant.TEMPLATE_DELIMITER + Constant.SCHEDULE_DATE + Constant.TEMPLATE_DELIMITER, System.getProperty(Constant.SCHEDULE_DATE));
templateProps.put(Constant.TEMPLATE_DELIMITER + Constant.COLUMNHEADER + Constant.TEMPLATE_DELIMITER, columnHeaders);
templateProps.put(Constant.TEMPLATE_DELIMITER + Constant.NEWLINE + Constant.TEMPLATE_DELIMITER, System.lineSeparator());
templateProps.put(Constant.TEMPLATE_DELIMITER + Constant.PSV_FILE_HEADER + Constant.TEMPLATE_DELIMITER +
Constant.TEMPLATE_DELIMITER+Constant.NEWLINE + Constant.TEMPLATE_DELIMITER+Constant.TEMPLATE_DELIMITER+Constant.COLUMNHEADER+Constant.TEMPLATE_DELIMITER,headerTemplate);
}
templateProps.put(Constant.TEMPLATE_DELIMITER + Constant.ROWCOUNT + Constant.TEMPLATE_DELIMITER, "" + rowCount);
}
public void write(List<? extends String[]> items) throws Exception {
rowCount += items.size();
delegate.write(items);
}
答案 0 :(得分:0)
我可以在FOOTER中插入行计数,但是当我尝试时 把它写在Header中它的回归0。
在创建标题时,值为0,因为尚未读取/处理/写入任何项目
解决问题我会选择
另一种解决方案可能是使用另一个面向块的步骤,该步骤再次读取和写入创建的文件,仅更改所需的值