@EnableBatchProcessing
스프링 Batch를 실행하기 위해서는 스프링부트 메인 클래스에 @EnbableBatchPrcoessing을 설정해줘야한다. 그렇다면 @EnableBatchProcessing 어노테이션을 달면 어떤 일이 일어날까?
@EnableBatchProcessing 추가 탐방
@EnableBatchProcessing 어노테이션을 타고 들어가면 @Import 어노테이션으로 BatchConfigureationSelector 클래스를 빈으로 등록하는 것을 알 수 있다.
BatchConfigureationSelector 클래스를 타고 들어가면, ModularBatchConfig / SimpleBatchConfig 중에 무엇을 스프링 빈으로 등록할지를 정한다. 여기서 정해진 설정값을 스프링 빈으로 등록해준다. 이 스프링 빈이 등록되면서 일련의 배치 과정이 동작할 준비가 되었다.
빈으로 등록된 SimpleBatchConfiguration은 AbstractBatchConfiguration 클래스를 상속했다.
위 객체를 타고 들어가면 jobBuilderFactory / stepBuilderFactory를 만들어 빈으로 등록해주는 것을 알 수 있다.
그리고 이 클래스는 특정 타겟값을 가지는 프록시 객체로 생성이 된다. 그렇다면 이 프록시 객체에 타겟값은 어떤 것이 들어올까? 바로 BatchConfigurerConfiguration의 값이 타겟으로 들어온다.
위 클래스로 들어가면 Static Class로 JPA / JDBC 관련 Batch 설정 클래스가 있는 것을 확인할 수 있다. 여튼 이 객체를 타겟값으로 만들어주고 SimpleBatchConfiguration에 필요한 필드를 생성할 때, 프록시 객체의 타겟값으로 전달해준다.
이 때, SimpleBatchConfiguration의 프록시 객체는 다음과 같이 job과 관련된 Repository, Launcher, Registry 등등이 만들어지고 모두 스프링 빈으로 등록이 된다. 해당 클래스를 살펴보면 아래에 생성자에 @Bean이 있는 것을 확인할 수 있다.
이후, BatchAutoConfiguration에서는 앞서 SimpleBatchConfiguration이 만들어 준 프록시 객체를 스프링 빈으로 주입 받을 수 있게 된다. 따라서 이 때 주입받은 값들로 Job을 실행시키는 JobLauncherApplicationRunner를 만들고 스프링 빈으로 등록할 수 있게 된다.
@EnableBatchProcessing 설정 시, 스프링 의존관계 주입 확인
의존관계 주입이 어떻게 되는지 간단히 모식도로 표시했다.
- @EnableBatchProcessing
- SimpleBatchConfiguration을 스프링빈으로 등록함
- SimpleBatchConfiguration
- SimpleBatchConfiguration의 부모 클래스는 StepBuilderFactory, JobBuilderFactory를 만들어 빈 등록함
- SimpleBatchConfiguration은 BatchConfigurerConfiguration을 스프링 빈으로 등록함.
- SimpleBatchConfiguration은 BatchConfigurerConfiguration을 타겟으로 주입받아 Job 관련 프록시 객체를 만들어 스프링 빈으로 등록함
- BatchAutoConfiguration
- BatchAutoConfiguration은 SimpleBatchConfiguartion에서 등록한 프록시 객체를 주입받아 JobLauncherApplicationRunner 빈을 등록함.
정리
- SpringBatch를 사용하기 위해서는 @EnableBatchProcessing 어노테이션을 메인 클래스 위에 작성해야한다.
- 위 어노테이션을 작성하면 Spring Batch를 사용하기 위한 스프링 빈이 등록된다.
'Spring > Spring Batch' 카테고리의 다른 글
Spring Batch : SimpleJob의 Validator (0) | 2022.03.05 |
---|---|
Spring Batch : Simple Job의 Start / Next (0) | 2022.03.05 |
Spring Batch : DB 스키마 Domain 정보 (0) | 2022.03.04 |
Spring Batch : 메타 데이터 저장을 위한 DB 스키마 (0) | 2022.03.04 |
Spring Batch : Job의 기본적인 구성, 사용 방법 (0) | 2022.03.04 |