728x90
반응형
SMALL

ItemProcessorItemReader에서 read()로 넘겨준 데이터를 개별로 가공한다. ItemProcessor는 언제 사용할까?

  • ItemReader가 넘겨준 데이터를 가공하려고 할 때
  • 데이터를 ItemWriter로 넘길지 말지 결정할 때 (null을 반환하면, ItemWriter에 전달하지 않음)

ItemProcessor는 필수가 아니다. 필요가 없는 경우는 어떤 경우일까?

  • 정말 ItemProcessor가 필요없는 경우. 예를 들면, ItemReader가 데이터베이스에서 데이터를 읽은 뒤 수정없이 그대로 ItemWriter에서 FileWrite하는 경우에는 ItemProcessor가 굳이 필요하지 않다.
  • ItemReaderItemWriter에서 데이터를 직접 가공까지 하는 경우인데, 이 방법은 추천하지는 않지만 상황에 따라 어쩔 수 없이 ItemReader에서 read할 때, 수정한 데이터를 넘겨주는 경우도 있고, ItemWriter에서 쓰기 전 데이터를 수정해서 write하는 경우가 있다.

 

ItemProcessor는 어떻게 구현할까?

ItemProcessorprocess를 구현하면 된다. ItemProcessorInputOutput이 있고, Input을 받아서 Output으로 변환한 뒤 반환해야 한다. 이때, InputOutput의 타입은 같을 수도 있고 다를 수도 있다.

@FunctionalInterface
public interface ItemProcessor<I, O> {
    @Nullable
    O process(@NonNull I item) throws Exception;
}

 

다음은, ItemProcessor를 입맛에 맞게 구현한 코드이다.

@Bean
@StepScope
public ItemProcessor<Order, Price> findExpensivePriceProcessor(PriceRepository priceRepository) {
    return order -> {
        Price price = priceRepository.findByProductId(order.getProductId());
        if (price.amount > 1000000L) {
            return price;
        } else {
            return null;
        }
    };
}

 

 

CompositeItemProcessor

자주 사용하지는 않지만, ItemProcessor 여러개를 체인처럼 연결할 때 사용한다. read를 통해 나온 아이템은 processor1processor2를 연속적으로 통과한다.

@Bean
@StepScope
public CompositeItemProcessor compositeItemProcessor(ItemProcessor<Order, Order> findExpensivePriceProcessor,
                                                     ItemProcessor<Order, Price> priceToPointProcessor) {
    List<ItemProcessor> delegates = List.of(findExpensivePriceProcessor, priceToPointProcessor);
    CompositeItemProcessor processor = new CompositeItemProcessor<>();
    processor.setDelegates(delegates);
    return processor;
}
  • findExpensivePriceProcessor, priceToPointProcessor를 연속적으로 사용하고자 할 때 이렇게 만들 수 있다.

 

정리를 하자면

데이터를 받아 가공할 때 사용하는 ItemProcessor를 알아보았다. 이 녀석은 필수는 아니다. 데이터를 가공할 필요가 있을 때 사용하면 된다. 이제 ItemWriter를 알아보자!

728x90
반응형
LIST

'Spring Batch' 카테고리의 다른 글

Listener  (1) 2024.10.09
ItemWriter  (1) 2024.10.09
ItemReader  (1) 2024.10.09
Chunk Processing  (5) 2024.10.09
Tasklet  (0) 2024.10.09

+ Recent posts