@EnableBatchProcessing
@SpringBootApplication
public class Springbatch2Application {
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private 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(Springbatch2Application.class, args);
}
}
@EnableBatchProcessing
배치 인프라스트럭처를 부트스트랩 한다.
스탭은 스프링 빈으로 구성되어 있다.
위 코드에서는 이름 및 태스크릿만으로 스탭을 구성한다.
RepeatStatus.FINISHED 를 반환하면 태스크릿이 완료됐음을 스프링 배치에게 알려준다는 의미이다.
RepeatStatus.CONTINUED 를 반환하면 멈추지 않고 계속 수행된다.
구성한 스탭을 사용해 잡을 작성할 수 있다.
잡은 하나 이상의 스탭으로 구성된다.
잡 이름과 해당 잡에서 시작할 스탭을 구성한다.
스프링 부트의 JobLauncherCommandLineRunner 라는 컴포넌트는 스프링 배치가 클래스 경로에 있다면 실행 시에 로딩되어 JobLauncher 를 사용해 ApplicationContext 에서 찾아낸 모든 잡을 실행한다.
1. 메인 메서드에서 스프링 부트를 부트스트랩할 때 ApplicationContext 가 생성
2. JobLauncherCommandLineRunner 가 실행
3. Job 수행
4. 첫 번째 step 실행
5. 트랜잭션 시작
6. Tasklet 실행
6. 결과가 JobRepository 에 갱신