[Spring boot] spring boot batch 관계도
spring boot batch는 JobRepository라는 큰 구조에서 JobLauncher, Job, Step 3단계로 나눠볼 수 있다.
Step
기본구조는 Step에서 정의된다. 1개의 Step은 읽고, 처리하고, 저장하는 구조를 가지고 있는 가장 실질적인 배치처리를 담당하는 도메인 객체이다. 그리고 이 Step들이 이루어져 Job을 표현한다.
Job
하나의 Job은 여러개의 Step으로 이루어져 있다. Job 객체는 JobBuilderFactory에서 생성된 JobBuilder를 통해 Job을 생성할 수 있다.
1) JobBuilerFactory
public class JobBuilderFactory {
private JobRepository jobRepository;
public JobBuilderFactory(JobRepository jobRepository) { // 1
this.jobRepository = jobRepository;
}
public JobBuilder get(String name) { // 2
JobBuilder builder = new JobBuilder(name).repository(jobRepository);
return builder;
}
}
1. JobBuilderFactory의 생성자를 통해 JobRepository을 주입한다.
JobBuilder가 생성되기 전에 미리 주입받은 JobRepository을 쓰기 때문에 모든 JobBuilder는 동일한 JobRepository을 사용하게 된다.
2. get메소드을 통해 name을 입력받아 새로운 JobBuilder을 리턴받을 수 있다.
2) JobBuiler
JobBuilderFactory을 통해 JobBuilder를 반환을 받게되면, 이를 통해 Job을 생성할 수 있다.
public class JobBuilder extends JobBuilderHelper<JobBuilder> {
public JobBuilder(String name) {
super(name);
}
public SimpleJobBuilder start(Step step) {
return new SimpleJobBuilder(this).start(step);
}
public JobFlowBuilder start(Flow flow) {
return new FlowJobBuilder(this).start(flow);
}
public JobFlowBuilder flow(Step step) {
return new FlowJobBuilder(this).start(step);
}
}
각각 다르게 정의된 2개의 start 메소드와 1개의 flow 메소드가 있다.
이는 용도에 따라 골라 쓸 수 있다.
Job Repository
배치처리는 일정한 주기 간격으로 특정 조건을 가진 데이터를 읽어와서 처리하고 저장하는 구조를 가지고 있다.
이런 작업이 매번 반복되다 보면 Job이 몇번 실행되었고, 언제 실행되었는지 기록이 되어야 좋다.
이러한 처리 정보를 메타데이터 형식으로 저장하여 관리하는 곳이 JobRepository다.
Job이 실행될 때마다 JobRepository에서는 배치 실행에 관련된 정보를 담는 도메인인 JobExcustion을 생성한다.
출처 :
[spring boot batch] 1. 간단한 대용량 배치처리, 스프링부트배치 (tistory.com)