가장 기초적인 예제 코드로 아래 코드를 작성 후 배치 프로젝트를 실행하면 Job이 실행된다.
하나의 Job에는 여러개의 Step이 등록되어 있고. 순서대로 Step1 -> Step2가 실행될것이다.
Job, Step 등록하기
package io.spring.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.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.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@RequiredArgsConstructor
public class HelloJobConfiguration {
private final JobBuilderFactory jobBulderFactory;
private final StepBuilderFactory stepBulderFactory;
@Bean
public Job helloJob(){ //Job을 생성한다.
return jobBulderFactory.get("helloJob")
.start(helloStep1()) //하나의 Job에는 여러개의 Step을 구성할 수 있다.
.next(helloStep2())
.build();
}
@Bean
public Step helloStep1() { //Step을 생성한다.
return stepBulderFactory.get("helloStep1")
.tasklet(new Tasklet() {
@Override // 로직 작성
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
System.out.println("===================");
System.out.println(" >> Hello Spring Batch!!");
System.out.println("===================");
return RepeatStatus.FINISHED; // 한번 실행 후 멈추는 용도. null이면 무한반복임
}
})
.build();
}
@Bean
public Step helloStep2() {
return stepBulderFactory.get("helloStep2")
.tasklet(new Tasklet() {
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
System.out.println("===================");
System.out.println(" >> step2 was executed");
System.out.println("===================");
return RepeatStatus.FINISHED; // 한번 실행 후 멈추는 용도. null이면 무한반복임
}
})
.build(); }
}
실행결과
