
Chunk지향 처리
- Spring Batch에서 일반적으로 사용
- 한 번에 하나씩 데이터를 읽고 트랜잭션 경계 내에서 쓰여지는 ‘Chunk’를 생성

Step 설정
- 샘플은 여기를 참고
TransactionManager와 Repository는 제공(@EnableBatchProcessing 사용시)
ItemProcessor는 선택적으로 사용
ItemReader > ItemProcessor > ItemWriter
ItemReader > ItemWriter
Commit 간격
재시작을 위한 Step 설정
startLimit: 시작 횟수 제한(기본값: Integer.MAX_VALUE)
- 초과시 Exception 발생(
StartLimitExceededException)
allowStartIfComplete: 항상 실행(무조건 실행되어야 하는 Step에 유용)
- Example
Skip 로직 설정
skip: 어떤 Exception 발생 시, skip
noSkip: Skip 되어질 Exception의 하위 Exception에서 skip하고 싶지 않을때 사용
Retry 로직 설정
retry: 어떤 Exception 발생 시, 재시도
retryLimit: 재시도 횟수
Rollback 설정
- 기본적으로
ItemWriter에서 문제 발생 시 rollback
- 롤백이 안되고자 한다면
noRollback
readerIsTransactionalQueue: 가령 JMS같은 Queue를 사용하는 경우, 매번 Queue의 메시지를 다시 저장하므로 이를 버퍼링하지 않도록 구성
트랜잭션 속성
Step 마다 트랜잭션 속성을 변경 가능
DefaultTransactionAttribute
Step에 ItemStream 등록
- 별도의 생명주기를 가지는 부분?
- delegate
- 조금 더 봐야할 부분..(참고)
Step 실행 가로채기
StepListener를 확장한 많은 클래스 존재(종류)
StepExecutionListener, ChunkListener, ItemReadListener, ItemProcessListener, ItemWriteListener, SkipListener
TaskletStep
Step이 아닌 또 다른 Batch 구성 방법(ex. 프로시저 call)
Tasklet: 하나의 메소드만을 가진 단순한 인터페이스(execute())
TaskletStep에 의해 RepeatStatus.FINISHED나 exception을 던질 때까지 반복적으로 호출
- 각각의
Tasklet 마다 트랜잭션을 가짐
- 프로시저, 스크립트, SQL 호출 등을 구현
TaskletStep 구현 시,chunk X
TaskletAdapter
Step 흐름 제어
순차적 흐름
조건적 흐름
- 많은 case(ex. 성공 여부)에 따른 다른 Step 처리
ExitStatus, BatchStatus (뭐가 좋을까?)
start .. on .. ( … from .. on .. to … ) end
Stop 설정
Step 종료: end()
end()를 하게되면, BatchStatus.COMPLETED
Step 실패: fail()
- 중지된
Job을 재시작할 때 시작할 Step: stopAndRestart()
프로그래밍적 흐름 결정
흐름 분리
Job간 흐름 정의 및 종속성 외부화
- flow의 일부분을 분리 및 재사용 가능
FlowBuilder 이용
JobStep 이용 (좋은 방법은 아닌 듯?)
Job과 Step 속성의 늦은 바인딩
@Value, -D (ex. -Dinput.file.path)
- 이름만 다른 동일한 구조의 파일에 유용(ex. 날짜별로 파일을 만드는 경우?)
StepScope
- 늦은 바인딩으로
jobParameters을 넘겨주게 되면 해당 빈을 미리 인스턴스화 할 수 없기 때문에 (Spring 컨테이너의 일부가 아니기 때문에) @StepScope을 추가해야 한다.
JobScope
- Spring Batch 3.0에 소개.
- 실행중인 작업 당 하나의 빈 인스턴스만 존재
@JobScope를 명시해줘야 하는 이유는 @StepScope의 이유와 같다.