시작하기 전에
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 |