SpringBatch는 대용량 레코드 처리에 필수적인 기능을 제공한다. 또한 최적화 및 파티셔닝 기술을 통해
대용량 및 고성능 배치 작업을 가능하게 하는 고급 기술 서비스 및 기능을 제공.
* 배치 작업 실패 이후 재시작을 하게 된다면, **<u>처음부터가 아닌 실패한 지점부터 실행</u>**
* 중복 실행을 막기 위해 성공한 이력이 있는 Batch는 **<u>동일한 Parameters로 실행시 Exception 발생</u>**
SpringBatch는 Job을 관리하지만 Job을 구동하거나 실행시키는 기능은 지원하지 않는다.
즉, 전용 Scheduler가 필요하다. ( Jenkins, Quartz 등)
배치처리 과정을 하나의 단위로 만들어 놓은 객체. 전체 계층 최상단
Job의 실행단위. Job이 실행될 때, 하나의 JobInstance가 생성. 1:N
String, Double, Long, Date의 4가지 형식을 지원
JobInstance의 실행 시도에 대한 객체.
JobInstance 실행에 대한 상태, 시작시간, 종료시간, 생성시간 등의 정보
A JobInstance가 실패하여 재실행을 하여도 동일한 JobInstance를 실행시키지만, 이 2번 실행에 대한 JobExecution은 **개별로 생성**.
Job의 배치처리를 정의하고 순차적인 단계를 캡슐화. Job은 1개이상의 Step을 가져야 하며 실제 일괄 처리를 제어하는 모든 정보를 가지고 있다.
Step의 실행 시도에 대한 객체.
JobExecution의 정보이외에 Read Count, Write Count, Commit Count, Skip Count 등의 정보
Job이 여러개의 Step으로 구성 되어 있을 경우, 이전 단계의 Step이 실패하게 되면 다음 단계가 실행되지 않음으로 실패 이후 StepExecution은 생성되질 않음.
Job에서 데이터를 공유 할 수 있는 데이터 저장소. Step간 Data 공유가 가능하며 Job 실패시 ExecutionContext를 통한 마지막 실행 값을 재구성 할 수 있다.
모든 배치 처리 정보를 담고있는 매커니즘.
Job 실행이후 JobRepository에 JobExecution과 StepExecution을 생성하게 되며 JobRepository에서 Execution 정보들을 저장하고 조회하며 사용
Job과 JobParameters를 사용하여 Job을 실행하는 객체
Step에서 Item을 읽어오는 Interface. ItemReader에 대한 다양한 인터페이스가 존재
처리된 Data를 쓰는 Interface. 처리 결과에 따라 Insert, Update, Queue Send가 될 수 도 있다. 기본적으로 Item을 Chunk로 묶어서 처리
Reader에서 읽어온 Item을 처리한다. 필수 요소는 아니며 Reader, Writer, Processor 처리를 분리하여 각각 역할을 명확하게 구분