[스프링배치] @EnableBatchProcessing 어노테이션
- Coding/Spring Batch
- 2021. 8. 18.
반응형
728x90
반응형
스프링부트 프로젝트 예제
package com.example.springbatch;
import lombok.RequiredArgsConstructor;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.StepContribution;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.core.scope.context.ChunkContext;
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
@EnableBatchProcessing
@RequiredArgsConstructor
public class SpringBatchApplication {
private final JobBuilderFactory jobBuilderFactory;
private final StepBuilderFactory stepBuilderFactory;
@Bean
public Step step() {
return this.stepBuilderFactory.get("step1")
.tasklet(new Tasklet() {
@Override
public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception {
System.out.println("Hello, world!");
return RepeatStatus.FINISHED;
}
}).build();
}
@Bean
public Job job() {
return this.jobBuilderFactory.get("job")
.start(step())
.build();
}
public static void main(String[] args) {
SpringApplication.run(SpringBatchApplication.class, args);
}
}
기본 스프링부트 프로젝트에서 스프링 배치 사용을 위해 아래 어노테이션을 추가하였다.
@EnableBatchProcessing
1) 스프링 배치가 제공하는 어노테이션으로, 배치 인프라스트럭처를 부트스트랩하는데 사용된다.
(인프라스트럭처 레이어 : ItemReader, ItemWriter 를 비롯해, 재시작과 관련된 문제를 해결할 수 있는 클래스와 인터페이스를 제공한다.)
2) 이 어노테이션이 배치 인프라스트럭처를 위한 대부분의 스프링 빈 정의를 제공한다. 그렇기에 아래 컴포넌트를 직접 포함시킬 필요가 없다.
- JobRepository : 실행중인 잡의 상태를 기록하는데 사용
- JobLauncher : 잡을 구동하는데 사용
- JobExplorer : JobRepository를 사용해 읽기 전용 작업을 수행하는데 사용
- JobRegistry : 특정한 런처 구현체를 사용할때 잡을 찾는 용도로 사용
- PlaformTransactionManager : 잡 진행 과정에서 트랜잭션을 다루는데 사용
- JobBuilderFactory : 잡을 생성하는 빌더
- StepBuilderFactory : 스텝을 생성하는 빌더
예제 코드 실행
@Bean
public Step step() {
return this.stepBuilderFactory.get("step1")
.tasklet(new Tasklet() {
@Override
public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception {
System.out.println("Hello, world!");
return RepeatStatus.FINISHED;
}
}).build();
}
step 은 Tasklet 방식으로 적용되어있다.
RepeatStatus.FINISHED;
- Tasklet이 완료되었음을 스프링 배치에게 알리겠다는 의미이다.
스프링 부트의 JobLauncherCommandLineRunner 컴포넌트
해당 컴포넌트는 스프링 배치가 클래스 경로에 있다면, 실행시에 로딩된다.
jobLauncher 을 사용하여 ApplicationContext 에서 찾아낸 모든 Job을 실행한다. 메인 메서드에서 스프링 부트를 부트스트랩할 때 ApplicationContext 가 생성되고, JobLauncherCommandLineRunner 가 실행되며 Job이 수행되었다. Job은 첫번째 Step을 실행하였고, 동시에 트랜잭션이 시작되었고, Tasklet이 실행되었으며 해당 결과가JobRepository 에 갱신되었다.
jobLauncher
https://devfunny.tistory.com/469
반응형