@Bean
public Job sampleJob(JobRepository jobRepository) {
return new JobBuilder("sampleJob", jobRepository)
.start(step1())
.next(step2())
.build();
}
ExecutionContext ec = stepExecution.getExecutionContext();
ec.putLong("linesRead", 40321L);
Spring Batch는 실행 이력을 아래와 같은 테이블에 저장합니다:
EndOfDayJob을 01-01에 실행 → 실패→ JobInstance는 2개, JobExecution은 3개 생성됨
@Configuration
@EnableBatchProcessing
public class BatchConfig {
@Bean
public JobLauncher jobLauncher(JobRepository jobRepository) {
return new SimpleJobLauncher(jobRepository);
}
@Bean
public Step sampleStep() {
return stepBuilderFactory.get("sampleStep")
.<Input, Output>chunk(10)
.reader(reader())
.processor(processor())
.writer(writer())
.build();
}
// reader(), processor(), writer() 구현 생략
}
| 장점 | 설명 |
|---|---|
| 책임 분리 | 각 컴포넌트가 단일 책임을 갖도록 분리되어 있음 |
| 확장성 | 커스텀 구현이 용이함 (예: 커스텀 ItemReader) |
| 재시작 가능성 | 실패한 지점에서의 복구를 자동으로 처리 가능 |
| 표준화 | 명확한 실행 흐름과 메타데이터 관리로 운영이 수월함 |