Spring Batch는 여러 주요 구성 요소로 이루어져 있으며, 이들은 각각 특정한 역할을 수행합니다. 주요 구성 요소는 다음과 같습니다:
Job은 배치 처리의 전체 과정을 나타내는 상위 개념입니다. Job은 여러 개의 Step으로 구성될 수 있으며, 각 Step은 순차적으로 실행되거나 병렬로 실행될 수 있습니다. Job은 실행될 때마다 고유한 ID를 가지며, Job의 상태와 실행 기록은 Job Repository에 저장됩니다.
Step은 Job을 구성하는 단위 작업입니다. 각 Step은 독립적으로 실행될 수 있으며, 각각의 Step은 특정한 작업을 수행합니다. Step은 다음과 같은 두 가지 방식으로 구성될 수 있습니다:
Tasklet은 Step 내에서 단일 작업을 수행하는 구성 요소입니다. Tasklet은 Tasklet 인터페이스를 구현하여 정의되며, execute 메서드를 통해 작업을 수행합니다. Tasklet 기반의 Step은 주로 간단한 작업을 수행할 때 사용됩니다.
@Component
public class SampleTasklet implements Tasklet {
@Override
public RepeatStatus execute(org.springframework.batch.core.StepContribution contribution, org.springframework.batch.core.scope.context.ChunkContext chunkContext) throws Exception {
log.info("Run SampleTasklet");
log.info("Wait for 5 seconds");
Thread.sleep(5000);
log.info("End SampleTasklet");
return RepeatStatus.FINISHED;
}
}
Job Repository는 배치 작업의 메타데이터를 저장하고 관리하는 역할을 합니다. Job의 실행 상태, Step의 실행 기록 등을 저장하여 배치 작업의 관리와 모니터링을 용이하게 합니다. 일반적으로 데이터베이스에 저장되며, 트랜잭션 관리와 재시도 기능을 제공합니다.
Job Launcher는 배치 작업을 실행하는 구성 요소입니다. Job Launcher는 지정된 Job을 실행하고, 실행 결과를 반환합니다. Job Launcher는 배치 작업을 스케줄링하거나 수동으로 실행할 때 사용됩니다.
@Autowired
private JobLauncher jobLauncher;
@Autowired
private Job job;
public void runJob() {
JobParameters jobParameters = new JobParametersBuilder()
.addLong("time", System.currentTimeMillis())
.toJobParameters();
jobLauncher.run(job, jobParameters);
}
Spring Batch의 배치 처리 흐름은 다음과 같습니다:
이와 같은 흐름을 통해 Spring Batch는 복잡한 배치 작업을 효율적으로 관리하고 실행할 수 있습니다.