스프링배치 완벽가이드 [1]

김종하·2022년 7월 17일
1
@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
배치 인프라스트럭처를 부트스트랩 한다.

  • JobRepository : 실행 중인 잡의 상태를 기록하는데 사용
  • JobLauncher : 잡을 구동하는데 사용
  • JobExplorer : JobRepository 를 사용해 읽기 전용 작업을 수행하는데 사용
  • JobRegistry : 특정한 런처 구현체를 사용할 떄 잡을 찾는 용도로 사용
  • PlatformTransactionManager : 잡 진행과정에서 트랜잭션을 다루는데 사용
  • JobBuilderFactory : 잡을 생성하는 빌더
  • StepBuilderFactory : 스탭을 생성하는 빌더

스탭 생성

스탭은 스프링 빈으로 구성되어 있다.
위 코드에서는 이름 및 태스크릿만으로 스탭을 구성한다.
RepeatStatus.FINISHED 를 반환하면 태스크릿이 완료됐음을 스프링 배치에게 알려준다는 의미이다.
RepeatStatus.CONTINUED 를 반환하면 멈추지 않고 계속 수행된다.

잡 생성

구성한 스탭을 사용해 잡을 작성할 수 있다.
잡은 하나 이상의 스탭으로 구성된다.
잡 이름과 해당 잡에서 시작할 스탭을 구성한다.

어떤 일들이 일어났는가?

스프링 부트의 JobLauncherCommandLineRunner 라는 컴포넌트는 스프링 배치가 클래스 경로에 있다면 실행 시에 로딩되어 JobLauncher 를 사용해 ApplicationContext 에서 찾아낸 모든 잡을 실행한다.
1. 메인 메서드에서 스프링 부트를 부트스트랩할 때 ApplicationContext 가 생성
2. JobLauncherCommandLineRunner 가 실행
3. Job 수행
4. 첫 번째 step 실행
5. 트랜잭션 시작
6. Tasklet 실행
6. 결과가 JobRepository 에 갱신

0개의 댓글