Spring Batch

Spring Batch - csv파일 쓰기

jaewoo 2022. 12. 23. 15:26

먼저 쓰는 코드

Job을 만들어주고 먼저 쓰기만 할 것이니 Step 설정을 start로 실행할 Step을 한 개만 지정한다.

 

Chunk 방식 Step 생성

Step에 이름은 csvItemWriterStep으로 지정하고 정크에 INPUT, OUTPUT 타입은 모두 Person 객체로 지정했다. 

여기서  ItemReader는 DB 값을 읽어와도 되지만 여기서는 테스트 데이터로 값만 확인할 수 있는 List를 만들어 실행한다.

List 데이터를 받아야하기에 ListItemReader를 통해 읽어들였다.

 

테스트 데이터를 만들어주는  메소드이다.

 

ItemWriter 메소드

BeanWrapperFieldExtractor -> csv 파일에 작성할 필드를 추출하기 위해 FieldExtractor 객체가 필요하다.

DelimitedlineAggregator -> csv Line을 write할떄 구분값을 설정한다 (,) ,로 구분한다는 것임 이름, 나이, 주소

fieldExtractor.setName은 추출할 필드명을 String 배열로 넘겨주면 된다(제네릭에서 설정한)ㅇ.

그리고 return시킬 FlatFileItemWriter를 만들어야하는데 FlatFileItemWriterBuilder로 편리하게 만들었다. FlatFileItemWriterBuilder로 해도 되는데 setter 메소드로 하나씩 지정해야 하기에 Builder를 사용한다.

name은 ItemReader에 이름 encoding은 한글때문에 UTF-8 이다

resource에는 FileSystemResource 객체로 (Reader에서는 다른 객체를 씀) csv 파일을 저장할 곳을 지정한다.

lineAggregator는 위에서 만든 lineAggregator를 지정한다.

이 lineAggregator에는 fieldExtractor가 설정되어 있다.

Intellij를 통해 해당 Job을 실행해보자

위에서 지정한 경로에 csv파일이 생긴 걸 알 수 있다.