Spring Batch : Spring Batch 시작, @EnableBatchProcessing

    @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를 사용하기 위한 스프링 빈이 등록된다.

    댓글

    Designed by JB FACTORY