Programing/Spring Framework

Spring Batch - Parallel Processing

BUST 2020. 9. 21. 11:02

시작하기 전에

Spring Batch를 통해 배치 서비스를 개발을 할때 성능이 극대화할 필요가 있을수가 있다. Thread을 이용하여 Parallel Processing을 하는 방법에 대해 알아보자.

 

Multi-threaded step

@Bean
public TaskExecutor taskExecutor(){
    return new SimpleAsyncTaskExecutor("spring_batch");
}

@Bean
public Step sampleStep(TaskExecutor taskExecutor) {
	return this.stepBuilderFactory.get("sampleStep")
				.<String, String>chunk(10)
				.reader(itemReader())
				.writer(itemWriter())
				.taskExecutor(taskExecutor)
				.build();
}
  • Step 안의 내부 작업 (Reader / Processor / Writer)을 Multi Therad로 작동을 하게 된다.
  • Step에 taskExecutor 설정을 추가하면 된다.
  • Reading, Writing, Processing이 각각 다른 Thread로 작동이 된다.
  • Commit Internval에 따라 Write가 작동이 된다.

 

Parallel Steps

@Bean
public Job job() {
    return jobBuilderFactory.get("job")
        .start(splitFlow())
        .next(step4())
        .build()        //builds FlowJobBuilder instance
        .build();       //builds Job instance
}

@Bean
public Flow splitFlow() {
    return new FlowBuilder<SimpleFlow>("splitFlow")
        .split(taskExecutor())
        .add(flow1(), flow2())
        .build();
}

@Bean
public Flow flow1() {
    return new FlowBuilder<SimpleFlow>("flow1")
        .start(step1())
        .next(step2())
        .build();
}

@Bean
public Flow flow2() {
    return new FlowBuilder<SimpleFlow>("flow2")
        .start(step3())
        .build();
}

@Bean
public TaskExecutor taskExecutor(){
    return new SimpleAsyncTaskExecutor("spring_batch");
}
  • 여러개의 Step을 동시에 돌릴때 사용한다.

 

그외의 방법

  • Remote Chunking of Step
    • Chunk 단위를 처리를 원격(Remote)로 하는 방법
  • Partitioning a Step
    • Step 여러개로 나눠어서 작동하는 방법

 

참고자료

docs.spring.io/spring-batch/docs/current/reference/html/scalability.html

'Programing > Spring Framework' 카테고리의 다른 글

Spring Framework - Bean Scope  (0) 2019.04.28
Spring Framework, IoC, DI  (0) 2019.04.13
JdbcTemplate, RowCallbackHandler 이용하기  (1) 2019.02.12
Spring Web MVC Filter, Interceptor  (0) 2018.12.14
Spring Retry  (0) 2018.10.30