반응형
이전 포스팅에서 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
반응형
'IT > Java' 카테고리의 다른 글
스트러츠란?(STRUTS) (15) | 2024.07.01 |
---|---|
Spring Batch 파일 읽기_추가 설정(파일 인코딩, 첫행 무시, 에러 시 패스) (26) | 2024.06.19 |
spring 에서 데이터 초기화 방법(Hibernate / sql 사용) (16) | 2024.06.17 |
Resource 인터페이스 관련 (22) | 2024.06.16 |
특정 폴더 내에 파일 리스트 뽑아오는 법 (16) | 2024.06.15 |
댓글