시냅스

Spring Boot 3++ 를 위한 Spring Batch migration 요약 본문

Java, Spring

Spring Boot 3++ 를 위한 Spring Batch migration 요약

ted k 2023. 11. 18. 16:04
이 글에서는 Spring 6, Spring boot 3++ 를 사용하면서 spring batch 5 로 업그레이드 할 때 migration 을 위한 내용을 요약합니다.
주로 사용 방법에 대해서만 상술하니 자세한 내용은 아래의 공식문서를 참고하시기 바랍니다.

 

 

 

Job, Step v4

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

    @Autowired
    private StepBuilderFactory stepBuilderFactory;

	@Autowired
    private JobBuilderFactory jobBuilderFactory;


    @Bean
    public Job myJob(Step step) {
        return this.jobBuilderFactory.get("myJob")
                .start(myStep)
                .build(); 

    @Bean
    public Step myStep() {
        return this.stepBuilderFactory.get("myStep")
                .tasklet(..) // or .chunk()
                .build();
    }

}

 

기존 v4 에서는 builder factory 내부에서 repository, transaction manager 를 내부적으로 사용하고 있었습니다.

다만, datasource 를 여러개로 구성하거나 custom 이 필요할 때에는 위와 같은 설정을 따를 수 없으므로 

v5 부터는 아래와 같이 명시적으로 표현하는 설정으로 바뀌었습니다.

 

Job, Step v5

@RequiredArgsConstructor
@Configuration
public class BatchConfig {
    private final int CHUNK_SIZE = 5;
    private final TestTasklet testTasklet;

    @Bean
    public Job testJob(JobRepository jobRepository, PlatformTransactionManager transactionManager) {
        return new JobBuilder("testJob", jobRepository)
                .start(testStep(jobRepository, transactionManager))
                .build();
    }

    @Bean
    public Step testStep(JobRepository jobRepository, PlatformTransactionManager transactionManager) {
        return new StepBuilder("testStep", jobRepository)
                .tasklet((contribution, chunkContext) -> {
                    System.out.println("TestBatchApplication executed");
                    return RepeatStatus.FINISHED;
                }, transactionManager).build();
    }

    @Bean
    public Step testStep2(JobRepository jobRepository, PlatformTransactionManager transactionManager) {
        return new StepBuilder("testStep2", jobRepository)
                .tasklet(testTasklet, transactionManager)
                .build();
    }
    
    @Bean
    // reader 와 processor, writer 는 딱히 바뀐 게 없음
    public Step testStep3(JobRepository jobRepository, PlatformTransactionManager transactionManager) {
        return new StepBuilder("testStep3", jobRepository)
                .<TestEntity, TestEntity>chunk(CHUNK_SIZE, transactionManager)
                .build();
    }

    class TestEntity {
    }

    @Component
    class TestTasklet implements Tasklet {
        @Override
        public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
            return null;
        }
    }
}

 

여러가지 패턴으로 작성하였지만, builder factory 대신 각각의 builder 로 바뀌엇고,

repository, transactionManager 를 명시적으로 주입하기만 하면 됩니다.

또한 @EnabledBatchProcessing 애노테이션이 필수가 아니게 되었습니다.

 

 

DefaultBatchConfiguration

@EnabledBatchProcessing 이 내부적으로 빈을 등록하던 것을

DefaultBatchConfiguration 을 통해 명시적인 커스텀을 할 수 있게 하는 방식으로 변경되었습니다.

 

@Configuration
public class MyBatchApplication extends BatchConfiguration {

    @Bean
    public Job job(JobBuilderFactory jobBuilderFactory) {
        return jobBuilderFactory.get("job")
                // define job
                .build();
    }

}

 

위와 같이 선언한 뒤 필요한 항목을 override 하여 사용하면 됩니다.

override 할 수 있는 항목은 아래와 같습니다.

  • jobRepository
  • jobLauncher
  • jobExplorer
  • jobRegistry
  • jobOperator
  • getDataSource
  • getRansactionManager
  • getValidateTransactionState
  • getIsolationLevelForCreate
  • getCharset
  • ... etc

 

 

Job Parameter

// v4
[+|-]parameterName(parameterType)=value

// v5
parameterName=parameterValue,parameterType,identificationFlag
parameterName='{"value": "parameterValue", "type":"parameterType", "identifying": "booleanValue"}'

 

한정적인 데이터 타입만을 지원했던 v4 와는 달리 v5 와 같은 형식을 통해 여러가지 데이터 타입을 지원하도록 변경되었습니다.

 

 

위와 같은 설정들을 통해 batch 는 더욱 확장성있는 애플리케이션으로 진화할 수 있습니다.

아래의 공식문서를 통해 더 자세한 내용을 알아보시기 바랍니다.

 

끝!

 

https://github.com/spring-projects/spring-batch/wiki/Spring-Batch-5.0-Migration-Guide

 

Spring Batch 5.0 Migration Guide

Spring Batch is a framework for writing batch applications using Java and Spring - spring-projects/spring-batch

github.com

 

Comments