본문 바로가기
IT/Java

Spring Batch 파일 읽기(FlatFileItemReader / MultiResourceItemReader)

by 성준하이 2024. 6. 18.
반응형

이전 포스팅에서 Spring Batch 에 대해서 다룬 글이 있다.

자세한 내용은 아래 참고 포스팅을 참고 바란다.

 

이번 포스팅은 Batch 의 chunk 방식으로 reader 에서 데이터를 읽을 때 DB가 아닌 파일을 읽는 방법에 대해서 다루려고 한다.

 

결국 Step에서 reader 설정하는 부분을 fileReader 로 변경을 해주면 된다.

 

아래는 step 예제 코드이다.

..이상 생략
private final FileItemReader fileReader;


@Bean
public Step mainStep() {

     return new StepBuilder("mainStep", jobRepository)
     .<TestDto,TestDto>chunk(chunkSize,platformTransactionManager)
     .reader(fileReader.reader())
     .processor(processor.processor())
     .writer(writer.writer())

     .build();
}

 

그럼 위에 주입된 FileItemReader 클래스를 살펴보면 아래와 같다.

참고로 공통으로 사용하기 위해 하나의 클래스를 더 만들어주고 상속을 받았다.

 

FileItemReader

@RequiredArgsConstructor
@Component
public class FileItemReader extends BatchFileItemReader<TestDto>{

     public MultiResourceItemReader<StoreITestDtofoDto> reader(){
          return super.reader(TestDto.class, names, delimiter, resources);
     }

}

 

BatchFileItemReader

public class BatchFileItemReader<T> {

     public BatchFileItemReader() {
     }

     public FlatFileItemReader<T> reader (Class<T> type, String[] names, String delimiter) {
         return new FlatFileItemReaderBuilder<T>()
             .delimited()
             .delimiter(delimiter)
             .names(names)
             .targetType(type)
             .saveState(false)
             .name("BatchFileItemReader")
             .build();
     }

     public MultiResourceItemReader<T> reader (Class<T> type, String[] names, String delimiter, Resource... resources) {
         return new MultiResourceItemReaderBuilder<T>()
             .resources(resources)
             .delegate(reader(type,names,delimiter))
             .saveState(false)
             .name("BatchFileItemReader")
             .build();
     }
}

 

결국 마지막 BatchFileItemReader 에 구현되어있는 reader 메서드를 타게 되는데 

단건에 대해서는 FlatFileItemReader , 멀티건에 대해서는 MultiResourceItemReader의 형식으로 리턴을 하여 파일을 읽을수 있다.


참고 포스팅

https://thenicesj.tistory.com/308

 

Spring Batch (part 1. 소개)

스프링에는 다양한 기능들이 있고 우리가 실제로 사용하는것은 프로젝트에 맞게 다양하다.지금까지 다뤄온 글들과는 다른 기능을 하나 소개 해보려고 한다. 먼저 이름을 소개하면 스프링 배치

thenicesj.tistory.com

 

반응형

댓글