스프링 배치란?
엔터프라이즈 시스템의 일상적인 운영에 필수적인 스프링 배치란 배치 프레임워크로 로깅/추적, 트랜잭션의 관리, 작업 처리 통계, 작업의 재시작, 건너뛰기, 리소스 관리 등의 대용량 레코드 처리에 유용한 기능을 제공한다.
스프링 배치의 구조
설명 | |
Job | Spring Batch에서 배치 어플리케이션을 위한 일련의 프로세스로 단일 실행단위이다. |
Step | Job을 구성하는 처리 단위이다. 하나의 Job은 N개의 Step을 포함한다. |
JobLauncher | Job 실행을 위한 인터페이스이다. |
ItemReader | Step에서 Item을 읽어오는 인터페이스이다. 다양한 방법으로 Item을 읽어 올 수 있다. |
ItemProcssor | Reader에서 읽어온 Item의 데이터를 처리하는 역할을 한다. 배치 처리의 필수 요소는 아니며 Reader, Writer, Processor처리를 분리하여 각각 역할을 나누어 구분하고 있다. |
ItemWriter | 처리된 Data를 Writer할 때 사용한다. Insert, update, send 될 수 있다. 다양한 인터페이스가 존재한다 |
JobRepository | Job과 Step의 상태를 관리하는 시스템이다. Spring Batch에서 지정된 테이블 스키마를 기반으로 데이터베이스에 유지가 된다. - 데이터베이스에 생성되는 테이블 명 BATCH_JOB_EXECUTION BATCH_JOB_EXECUTION_CONTEXT BATCH_JOB_EXECUTION_PARAMS BATCH_JOB_INSTANCE BATCH_STEP_EXECUTION BATCH_STEP_EXECUTION_CONTEXT |

스프링 배치 설정 방법
1. dependency추가
spring-boot-starter-batch 의존성을 추가한다.
compile("org.springframework.boot:spring-boot-starter-batch")
2. application.yml 에 스프링배치 관련 프로퍼티 설정을 한다.
# spring batch job
spring:
batch:
job:
enabled: true
names : testJob
3. 배치기능 활성화
Application 클래스에 @EnableBatchProcessing 추가
@EnableBatchProcessing
@SpringBootApplication
public class BatchApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(BatchApplication.class, args);
}
}
4. Batch Config 생성
job과 step
@Configuration
@EnableBatchProcessing
@RequiredArgsConstructor
public class TestComponent {
private final JobBuilderFactory jobBuilderFactory;
private final StepBuilderFactory stepBuilderFactory;
//job 생성
@Bean
public Job testJob(){
return this.jobBuilderFactory.get()
.start(firstStep())
.next(secondStep())
.next(lastStep())
.end()
.build();
}
//step생성
public Step firstStep(){
return stepBuilderFactory.get("startTasklet")
.tasklet((contribution, chunkContext) -> {
System.out.println("step1");
return RepeatStatus.FINISHED;
}) .build();
}
//tasklet
}
Job builder로 step의 병렬화, 선언적 flow제어, flow 정의 외부화 같은 요소들이 설정 가능하다.
5. 서비스단 로직 작성
@JobScope, @StepScope