Tasklet
•
Step이 중지될 때까지 execute 메서드가 계속 반복해서 수행하고,
수행할 때마다 독립적인 트랜잭션이 얻어짐
•
초기화, 저장 프로시저 실행, 알림 전송과 같은 Job에서 일반적으로 사용
•
계속 진행할지 아님 끝낼지 두 가지 경우만 제공
•
데이터의 처리 과정이 tasklet 안에서 한번에 이루어지고, 배치 처리 과정이 쉬운 경우 쉽게 사용됨
(대용량 데이터 처리의 경우 더 복잡해질 수 있음)
•
tasklet의 execute 메서드의 return 타입은 RepeatStatus
RepeatStatus.FINISHED - 종료 / RepeatStatus.CONTINUABLE - 다시 실행
Chunk
•
한 번에 하나씩 데이터(row)를 읽어 Chunk라는 덩어리를 만든 뒤, Chunk 단위로 트랜잭션을 다룸
•
Chunk 단위로 트랜잭션을 수행하기 때문에 실패할 경우엔 해당 Chunk 만큼만 롤백이 되고, 이전에 커밋된 트랜잭션 범위까지는 반영이 됨
•
대용량 데이터를 처리할 경우 사용됨
•
Chunk 기반 Step은 ItemReader, ItemProcessor, ItemWriter라는 3개의 주요 부분으로 구성
➜ ItemReader와 ItemProcessor에서 데이터는 1건씩 다뤄지고, ItemWriter에선 Chunk 단위로 한번에 처리
ItemReader
Step(Database)에서 배치 처리할 Item을 읽어오는 역할
ItemReader에 대한 다양한 인터페이스가 존재하고, 다양한 방법으로 Item을 읽어올 수 있음
⠀
ItemProcessor
Reader로 읽어온 Item을 데이터를 가공/처리하는 역할
배치를 처리하는데 필수 요소는 아님
item을 필터 도중 null로 리턴하면, 그 item은 write로 전달되지 못함
(값이 정확히 있는 item들만 write로 전달됨)
⠀
ItemWriter
Processor로 가공/처리 된 데이터들(items : List< item >)을 Database에 저장하는 역할
처리 결과물에 따라 Insert / Update / Queue를 사용한다면 Send가 될 수도 있음
ItemWriter에 대한 다양한 인터페이스가 존재
기본적으로 item들은 List 단위로 처리되며, 그 List는 Chunk 단위로 처리됨
Plain Text
복사