Spring Batch
는 로깅/추적
, 트랜잭션 관리
, 작업 처리 통계
, 작업 재시작
, 건너뛰기
, 리소스 관리
등 대용량 레코드 처리에 필수적인 기능을 제공한다.
또한 최적화 및 파티셔닝 기술을 통해 대용량
및 고성능
배치 작업을 가능하게 하는 고급 기술 서비스 및 기능도 제공한다.
Spring Batch
에서 배치가 실패하여 작업 재시작을 하게 된다면 처음부터가 아닌 실패한 지점
부터 실행을 하게 된다.
또한 중복 실행을 막기 위해 성공한 이력이 있는 Batch는 동일한 Parameters로 실행 시 Exception
이 발생하게 된다.
Spring Batch
의 특징은 다음과 같다.
Spring Batch
는 로깅/추적
, 트랜잭션 관리
, 작업 처리 통계
, 작업 재시작
, 건너뛰기
, 리소스 관리
등 대용량 레코드 처리에 필수적인 기능을 제공1개의 작업에 대한 명세서이다. 어디까지가 1개의 작업인지 애매할 수 있지만 그 기준은 상황별로 재량껏 판단할 수 있다.
Job
은 여러개의 Step
을 포함할 수 있다.Job name
을 통해 Job
을 구분할 수 있다.Job name
으로 Job
을 실행시킬 수 있다.Job Builder Factory
로 쉽게 Job
을 만들 수 있다.Ex ) Job : 게임을 한다.
Step 1. 컴퓨터를 켠다.
Step 2. 게임에 로그인 한다.
Step 3. 게임 시작을 누른다.
JobInstance
는 Job
의 실행의 단위를 나타냅니다. Job
을 실행시키게 되면 하나의 JobInstance
가 생성된다.
예를들어 1월 1일 실행, 1월 2일 실행을 하게 되면 각각의 JobInstance
가 생성되며 1월 1일 실행한 JobInstance
가 실패하여 다시 실행을 시키더라도 이 JobInstance
는 1월 1일에 대한 데이터만 처리하게 된다.
JobExecution
은 JobInstance
에 대한 실행 시도에 대한 객체이다.
1월 1일에 실행한 JobInstacne
가 실패하여 재실행을 하여도 동일한 JobInstance
를 실행시키지만 이 2번에 실행에 대한 JobExecution
은 개별로 생기게 된다.
JobExecution
는 이러한 JobInstance
실행에 대한 상태
, 시작시간
, 종료시간
, 생성시간
등의 정보를 담고 있다.
1개의 Job 내에서 공유하는 공간(Contex)이다.
1개의 Job에 여러개의 Step이 있다면 그 Step들은 해당 공간을 공유할 수 있다.
Job이 시작될 때 필요한 시작 조건을 JobParameters에 넣는다.
동일한 Job에 JobParameters까지 동일하면 같은 JobInstence이다.
Ex ) 편의점 리스트를 가져와서 저장하는 Job
- 밤 10시에는 C편의점 리스트의 정보 갱신
- 밤 11시에는 G편의점 리스트의 정보 갱신
조건 )
- 밤 10시에는 'JobParameter = C편의점'으로 구동되어야 함
- 밤 11시에는 'JobParameter = G편의점'으로 구동되어야 함
Spring Batch에서는 EnableBatchProcessing 어노테이션을 달면 아래 bean들을 사용할 수 있도록 미리 구현되어있다.
Spring Batch 프로젝트를 만들게 된다면 필수적으로 EnableBatchProcessing를 추가해 주어야 한다.
@EnableBatchProcessing를
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}