본문 바로가기

프레임워크/Spring Batch

JOB - ItemReader

어쩌구 저쩌구 해도 ItemReader를 FlatFileItemReader가 계승하고 있다.

두개의 컴포넌트를 가지고 있다.

1. 

Resource : Interface로써, 읽어들일 대상 파일을 나타내는 스프링의 Resource이다.

( springframework-core에 존재하며, org.springframework.core.io 패키지에 존재한다. )

2. LineMapper의 구현체 : 

(springframework-batch-infrastructure에 존재하며, org.springframework.batch.item.file 패키지에 존재한다. )

역할은 Resource에서 읽어드린 파일의 각줄에 매핑을 무엇을 할지 설정하는 것이다.

요 메인 컴포넌트 두개로 이어진게, FlatFileItemReader 이다.

 

1. Chunk 기반 배치란 무엇일까 ?

흔히들 아는 reader - processor - writer 요걸 돌리는게 아래와 같은 녀석이 돌리는 것이다.

해당 코드를 잘 보자.

임계점에 도달할때까지 열심히 돌리고 있다.

doIteration -> read -> doRead 순서이다. 핵심적인 사항은 contribution.incrementReadCount()  요 부분이다. StepCountribution이고 readCount를 증가시키고 있다.

 

왜 증가시킬까 ? 간단하다. 처음 잡에 설정해준 ChunkSize만큼만 돌게 하기 위해서이다. 그 담에 도는 녀석이.

요 녀석이다. TaskExecutionRepeatTemplate 요 녀석으로 getNextResult()를 호출한다.

Diagram은 아래와 같다.

고 다음이

Complete되었는지를 확인한다.

while문으로 running이 오버될때까지 빙빙 도는거다.

Strategy 전략으로 Support를 활용해서, event를 전달해 running의 여부를 결정하는게 인상깊다.

 

크나큰 공간에 여러 물건들을 놓고, 각 필요한 사람들이 물건을 집어가며 찾아가는 모습을 생각하면 쉬울거라 생각한다.

 

그리고, Spring Batch를 사용하다보면 Batch InfraStructure를 보게되고 관련 테이블들을 볼수 있을 것이다.

해당 테이블에 대한 update는 RepeatTemplate의 getNextResult()내부에서 수행된다. 스텝이 실행되기 직전에 수행되었다는 전 스텝에 대한 update를 수행하는 것이다.

 

SImpleChunkProvider의 종료 조건과 지속 조건은 아래 조건과 같다.

1) 종료 조건 : RepeatStatus.FINISHED Item이 null일 경우 요녀석에 도달한다.

 

2. SpringBatch core Skip Policy

 

 

 

Simple Job 생성하기.

 

https://github.com/diqksrk/spring-batch-prac

 

GitHub - diqksrk/spring-batch-prac

Contribute to diqksrk/spring-batch-prac development by creating an account on GitHub.

github.com

 

깃허브로 소스 올리며 공부중이다.

완료되거나 중간에 정리한번 하면서 블로그에 업데이트 할 예정이다.