2022. 9. 20. 04:19

Spring batch 5.2 JobBuilderFactory deprecation

제가 개발하는 어플리케이션 중에 spring-batch-core 5.0.0-SNAPSHOT 을 사용하는 배치 어플리케이션 입니다. 매일 실행하던 배치를 돌리려고 하는데 어느 날 잘 돌아가던 프로그램이 에러가 나더군요. 에러 내용은

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2022-09-19T11:48:51.469-07:00 ERROR 9964 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

Field jobBuilderFactory in com.min. .. .BatchConfiguration required a bean of type 'org.springframework.batch.core.configuration.annotation.JobBuilderFactory' that could not be found.

The injection point has the following annotations:
	- @org.springframework.beans.factory.annotation.Autowired(required=true)


Action:

Consider defining a bean of type 'org.springframework.batch.core.configuration.annotation.JobBuilderFactory' in your configuration.

이게 뭔 소린가 하고 구글링을 해봤는데, 검색 결과가 없어서 코드를 보니 JobBuilderFactory 가 deprecated 되었더라고요. spring batch 가 5.2 로 버전 업 되면서 많이 변경된 것 같았어요. 

좀 더 노오력 해서 구글링 한 결과 

// Sample with v5
@Configuration
@EnableBatchProcessing
public class MyJobConfig {

    @Autowired
    private JobRepository jobRepository;

    @Bean
    public Job myJob(Step step) {
        return new JobBuilder("myJob")
                .repository(this.jobRepository)
                .start(step)
                .build();
    }

}

이런 식으로 변경하면 된다고 하네요. 더 자세한 내용이 궁금하신 분들은 spring batch 5.0 migration guide 를 참고하시면 되겠습니다. https://github.com/spring-projects/spring-batch/wiki/Spring-Batch-5.0-Migration-Guide

 

GitHub - spring-projects/spring-batch: Spring Batch is a framework for writing offline and batch applications using Spring and J

Spring Batch is a framework for writing offline and batch applications using Spring and Java - GitHub - spring-projects/spring-batch: Spring Batch is a framework for writing offline and batch appli...

github.com

그런데 migration guide 에서 사용되는 JobBuilder(String) 도 5.2 에서 deprecation 되었는데 어쩌라는 건지...

StepBuilderFactory 도 deprecation 되었는데, 

// Sample with v5
@Configuration
@EnableBatchProcessing
public class MyStepConfig {

    @Bean
    public Step myStep(JobRepository jobRepository, Tasklet myTasklet, PlatformTransactionManager transactionManager) {
        return new StepBuilder("myStep", jobRepository)
                .tasklet(myTasklet, transactionManager)
                .build();
    }

}

이렇게 바꾸면 된다고 합니다.

제가 만든 배치는 아직 step 이 하나 뿐인 단순 어플이어서 migration 했지, step 많은 어플은 5.2 으로 migration 할 때 어려울 것 같아요.

spring-batch-core 빌드가 요 며칠 다 불안정해서 마일스톤 버전으로 돌리려고 하니 또 이전 버전들은 현재 코드로 안돌아가서 어떻게 해야 할 지 모르겠네요. 5.0 snapshot 버전은 비추입니다.