개요

Spring Batch 5.0부터 JobBuilderFactory와 같은 일부 팩토리 클래스들이 deprecated 되었고, 대신 직접 빌더를 생성하는 방식으로 변경

  • 팩토리 메서드는 보통 매개변수가 숨겨져 있는 경우가 많아 코드의 동작을 이해하는 데에 다소 어려움 해결

Spring Batch 5.0 Migration Guide

  • tasklet, chunk
  • TransactionManager 추가
    • PlatformTransactionManager는 Spring이 제공하는 트랜잭션 관리 인터페이스로, 일반적으로 데이터베이스와 관련된 트랜잭션을 관리합니다.
    • JobConfig 또는 BatchConfig에서 주입받는 PlatformTransactionManager는 보통 Spring이 관리하는 DataSourceTransactionManager나 JpaTransactionManager와 같은 구체적인 구현체를 사용합니다. 이 구현체들은 애플리케이션에서 설정된 데이터베이스 연결(즉, DataSource나 EntityManagerFactory)을 기반으로 트랜잭션을 관리합니다.
    // Sample with v4
    @Configuration
    @EnableBatchProcessing
    public class MyStepConfig {
    
        @Autowired
        private StepBuilderFactory stepBuilderFactory;
    
        @Bean
        public Step myStep() {
            return this.stepBuilderFactory.get("myStep")
                    .tasklet(..) // or .chunk()
                    .build();
        }
    
    // Sample with v5
    @Configuration
    @EnableBatchProcessing
    public class MyStepConfig {
    
        @Bean
        public Tasklet myTasklet() {
           return new MyTasklet();
        }
    
        @Bean
        public Step myStep(JobRepository jobRepository, Tasklet myTasklet, PlatformTransactionManager transactionManager) {
            return new StepBuilder("myStep", jobRepository)
                    .tasklet(myTasklet, transactionManager) // or .chunk(chunkSize, transactionManager)
                    .build();
        }
    
    }
    
  • JobBuilderFactory → JobBuilder
  • StepBuilderFactory → StepBuilder
    • get
// Sample with v4
@Configuration
@EnableBatchProcessing
public class MyStepConfig {

    @Autowired
    private StepBuilderFactory stepBuilderFactory;

    @Bean
    public Step myStep() {
        return this.stepBuilderFactory.get("myStep")
                .tasklet(..) // or .chunk()
                .build();
    }
}
// Sample with v5
@Configuration
@EnableBatchProcessing
public class MyStepConfig {

    @Bean
    public Tasklet myTasklet() {
       return new MyTasklet();
    }

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