[스프링배치] @EnableBatchProcessing 어노테이션

반응형
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

 

스프링 배치 잡(Job)과 스텝(Step)

잡 (Job) 상태를 수집하고 이전 상태에서 다음 상태로 전환된다. 스텝 (Step) 스프링 배치에서 가장 일반적으로 상태를 보여주는 단위이다. 각 스텝은 잡을 구성하는 독립된 작업의 단위이다. 스텝

devfunny.tistory.com

 

반응형

Designed by JB FACTORY