2016-07-21 2 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; 

} 

두 가지.

내 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; 

} 
관련 문제