Batch 시작해보기

Annotation

@EnableBatchProcessing

import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableBatchProcessing
public class PracticeApplication {

    public static void main(String[] args) {
        SpringApplication.run(PracticeApplication.class, args);
    }

}

배치 작업에 필요한 빈을 미리 등록하여 사용할 수 있도록 해준다.

기본 포함 bean
bean name
설명

JobRepository

jobRepository

실행 중인 Job의 상태를 기록하는 데 사용

JobLauncher

jobLauncher

잡을 구동하는데 사용

JobExplorer

jobExplorer

JobRepository를 사용해 읽기 전용 작업을 수행하는데 사용

JobRegistry

jobRegistry

특정한 런처 구현체를 사용할 때 Job을 찾는 용도로 사용

PlatformTransactionManager

transactionManager

잡 진행 과정에서 트랜젝션을 다루는데 사용

JobBuilderFactory

jobBuilders

잡을 생성하는 빌더

StepBuilderFactory

stepBuilders

스텝을 생성하는 빌더

JobRepositoryPlatformTransactionManager는 필요에 따라 데이터 소스를 사용할 수 있다.

Config 설정

DefaultBatchConfiguerer

만약 커스텀이 필요한 경우 DefaultBatchConfiguerer을 상속받아 필요한 설정만 재정의 하여 사용할 수 있다. 예를 들어, 여러 개의 DB에 접근하고 싶어 DataSource를 여러개 설정해야하는 경우이다.

Spring Batch 실행하기

Spring Batch에서는 메타 데이터 테이블이 필요하다.

  • 이전에 실행한 Job 정보

  • 최근 실패한 Batch Parameter가 어떤 것들이 있고, 성공한 Job은 어떤 것들인지

  • 다시 실행한다면 어디서 부터 시작할지

  • 어떤 Job에 어떤 Step이 있고, Step들 중 성공한 Step과 실패한 Step들은 어떤 것들이 있는지

Spring Batch Meta-Data ERD

기본적으로 H2 DB를 사용할 경우에는 해당 테이블을 Boot가 실행될때 자동으로 생성해주지만, MySQL, Oracle과 같은 DB는 개발자가 직접 생성해주어야 한다. 해당 sql문을 차례대로 실행해주면 된다.

image-20210124205536134

MySql, H2 Database 연결하기

pom.xml

application.yml

image-20210124224911352

Active profiles에 설정한 값이 spring-profiles 값이다. 다음과 같이 설정 후 실행해주면 mysql이 기본 DB로 실행되는 것을 볼 수 있다.

지정한 Batch Job만 실행하기

Spring Batch가 수행될 때, arguments로 job.name이 넘어오면 해당 값과 일치하는 Job만 수행시킬 수 있다.

${job.name:NONE} 의 의미는 job.name이 있으면 job.name을 할당하고, 없으면 NONE을 할당하겠다는 의미이다. 여기서 NONEspring.batch.job.names 에 할당되면 어떠한 배치도 실행하지 않겠다는 의미이며, 혹시라도 값이 없는 경우에 모든 배치가 수행되지 않도록 막는 역할을 한다.

image-20210131194226674

위 program arguments를 추가하고 수행하면 해당 name의 Job만 실행 되는 것을 확인할 수 있다.

실제 운영 환경에서는 위와 같이 수행하면된다.

참고

Last updated

Was this helpful?