2016-05-26 3 views
0

DBデータに基づくフラットファイルレポートを作成するためにスプリングバッチを使用しています。 I「は、フラットファイルの形式1 フラットファイルのヘッダーに行数を入れる

以下HEADER1(ファイル名) HEADER2(レコード数が含まれています)
HEADER3(列名)に似て
RECORD1
RECORD2
RECORDN
FOOTER
FlatFileHeaderCallbackおよびFlatFileHeaderCallbackインターフェイスを使用して、ヘッダーとフッターを適切に記述します。私はフッターに行数を挿入することができるよしかし、私はヘッダーでそれを記述しようとしていますときには、returing 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

FOOTERしかし、私は にしようとしているヘッダに書き込むその書かれた/何のアイテムが処理/読まれていないので、ヘッダの作成時に値が0の0

をreturingまだ

私は

  • 既存のステップで値を使用する値
  • を保存するためのExecutionContextを使用して入力回数
  • を取得するためにSELECT COUNT ... SQLを実行しますTaskletStepとなるだろう問題を解決するため

    ヘッダにそれを書き込む

別の解決策は、所望の値

を変更、再び読み出して作成されたファイルを書き込む別のチャンク配向ステップを、使用することができ
関連する問題