2016-07-21 23 views
0

データベースから読み込んでcsvに書き込む春バッチジョブを作成しました。ItemWriterが行を出力しない

ジョブは機能しますが、残念ながら私の出力CSVファイルには、自分のドメインオブジェクトのtoStringメソッドにあるものが置かれます。

私が実際にしているのは、コンマで区切られたすべての値です。だから、下の私のItemWriterで、私はDelimitedLineAggregatorを入れました。

しかし、私はそのDelimitedLineAggregatorの私の理解が間違っていると思います。私はLineAggregatorが出力に使用されていたと思ったが、今は入力データに使用されていると思う。

@Bean 
@StepScope 
public ItemWriter<MasterList> masterListFileWriter(
     FileSystemResource masterListFile, 
     @Value("#{stepExecutionContext}")Map<String, Object> executionContext) { 

    FlatFileItemWriter<MasterList> writer = new FlatFileItemWriter<>(); 
    writer.setResource(masterListFile); 
    DelimitedLineAggregator<MasterList> lineAggregator = new DelimitedLineAggregator<>(); 
    lineAggregator.setDelimiter(";"); 
    writer.setLineAggregator(lineAggregator); 
    writer.setForceSync(true); 
    writer.open(new ExecutionContext(executionContext)); 
    return writer; 

} 

2つのもの。

私のMasterListドメインオブジェクトのすべての値をコンマで区切って出力するにはどうすればよいですか? toStringメソッドを唯一の方法に変更していますか?

また、ライターでLineAggregatorの使用を明確にすることもできます。私は今あなたのリーダーから来る線を集計する方法を指定するために使用されていると考えています。そうですか?事前

答えて

0

おかげで私はライターにBeanWrapperFieldExtractorを追加することによって、これを働きました。

@Bean 
@StepScope 
public ItemWriter<MasterList> masterListFileWriter(
     FileSystemResource masterListFile, 
     @Value("#{stepExecutionContext}")Map<String, Object> executionContext) { 

    FlatFileItemWriter<MasterList> writer = new FlatFileItemWriter<>(); 
    writer.setResource(masterListFile); 

    DelimitedLineAggregator<MasterList> lineAggregator = new DelimitedLineAggregator<>(); 
    lineAggregator.setDelimiter(","); 

    BeanWrapperFieldExtractor<MasterList> extractor = new BeanWrapperFieldExtractor<MasterList>(); 
    extractor.setNames(new String[] { "l2", "l2Name"}); 
    lineAggregator.setFieldExtractor(extractor); 

    writer.setLineAggregator(lineAggregator); 
    writer.setForceSync(true); 

    writer.open(new ExecutionContext(executionContext)); 

    return writer; 

} 
関連する問題