paranjong

[Spring] Spring Batch 처리 방식 본문

Development Study/Spring Framework

[Spring] Spring Batch 처리 방식

paranjong 2023. 3. 12. 15:09
  • 배치를 처리할 수 있는 방법은 크게 2가지
  • Tasklet을 사용한 Tasklet을 사용한 Task 기반 처리
    • 배치 처리 과정이 비교적 쉬운 경우 쉽게 사용
    • 대량 처리를 하는 경우 더 복잡
    • 하나의 큰 덩어리를 여러 덩어리로 나누어 처리하기 부적합
    @Bean
    public Step taskBaseStep(){
        return stepBuilderFactory.get("taskBaseStep")
                .tasklet(this.tasklet())
                .build();
    }

    private Tasklet tasklet(){
        return (contribution, chunkContext) -> {
            List<String> items = getItems();
            log.info("Task Item size : {}", items.size());

            return RepeatStatus.FINISHED;
        };
    }

    private List<String> getItems() {
        List<String> items = new ArrayList<>();

        for (int i=0; i<100; i++){
            items.add(i + "hello");
        }

        return items;
    }

 

  • Chunk를 사용한 chunk(덩어리) 기반 처리
    • itemReader, itemProcessor, itemWriter의 관계 이해 필요
    • 대량 처리를 하는 경우 Tasklet보다 비교적 쉽게 구현
    • 예를 들면 10,000개의 데이터 중 1,000개씩 10개의 덩어리로 수행
      • 이를 Tasklet으로 처리하면 10,000개를 처리하거나, 수동으로 1,000개씩 분할
   @Bean
    public Step chunkBaseStep() {
        return stepBuilderFactory.get("chunkBaseStep")
                //Generic Type<String, String> 1번째 타입 -> input, 2번째 타입->output, chunck size 10
                .<String, String>chunk(10) 
                .reader(itemReader())
                .processor(itemProcessor())
                .writer(itemWriter())
                .build();
    }

    private ItemReader<String> itemReader() {
        return new ListItemReader<>(getItems()); // date read
    }
    
    private ItemProcessor<? super String, String> itemProcessor() {
        return item -> item + ", Spring Batch"; //data processing
    }

    private ItemWriter<? super String> itemWriter() {
        return items -> log.info("chunk item size : {}", items.size()); //data writing
    }

 

  • reader, process에서는 하나의 데이터를 처리
  • chunck 사이즈 이하로, reader, process 반복 수행
  • reader, process 처리 후에 writer에서는 지정한 chunk 사이즈가 될 때 write 수행.

Comments