-
8. CompositeItemProcessor 으로 여러단계에 걸쳐 데이터 Transform하기Spring/Spring Batch 2024. 12. 2. 18:03
CompositeItemProcessor는 Spring Batch에서 제공하는 클래스로, 여러 ItemProcessor를 하나로 결합하여 순차적으로 데이터를 처리할 수 있게 해줍니다. CompositeItemProcessor를 사용하여 여러개의 ItemProcessor간의 체이닝이 가능합니다.
하나의 ItemProcessor에 여러 작업을 하도록 구현 할 수 있지만, Processor 하나에 역할이 커지고 책임이 많아 지기 때문에 작은 사이즈의 Processor로 구현 한 뒤에 CompositeItemProcessor로 체이닝을 통해 사용합니다.
또한, Processor를 재사용하여 다른 Job에서도 활용할 수 있습니다. 다양한 ItemProcessor를 조합하여 원하는 처리 과정을 구현할 수 있다는 장점도 있습니다.
LowerCaseItemProcessor 작성하기
package com.schooldevops.springbatch.batchsample.jobs.mybatis; import com.schooldevops.springbatch.batchsample.jobs.models.Customer; import org.springframework.batch.item.ItemProcessor; /** * 이름, 성별을 소문자로 변경하는 ItemProcessor */ public class LowerCaseItemProcessor implements ItemProcessor<Customer, Customer> { @Override public Customer process(Customer item) throws Exception { item.setName(item.getName().toLowerCase()); item.setGender(item.getGender().toLowerCase()); return item; } }After20YearsItemProcessor 작성하기
package com.schooldevops.springbatch.batchsample.jobs.mybatis; import com.schooldevops.springbatch.batchsample.jobs.models.Customer; import org.springframework.batch.item.ItemProcessor; /** * 나이에 20년을 더하는 ItemProcessor */ public class After20YearsItemProcessor implements ItemProcessor<Customer, Customer> { @Override public Customer process(Customer item) throws Exception { item.setAge(item.getAge() + 20); return item; } }CompositeItemProcess 구현하기
@Bean public CompositeItemProcessor<Customer, Customer> compositeItemProcessor() { return new CompositeItemProcessorBuilder<Customer, Customer>() .delegates(List.of( new LowerCaseItemProcessor(), new After20YearsItemProcessor() )) .build(); }- CompositeItemProcessorBuilder를 이용하여 delegates를 통해서 ItemProcessor가 수행할 순서대로 배열을 만들어 전달했다.
- compositeItemProcessor를 processor에 넣는다면 원하는 작업을 수행하는 것을 볼 수 있다.
'Spring > Spring Batch' 카테고리의 다른 글
10. 스프링배치 플로우 컨트롤 하기 (0) 2024.12.10 9. 입맛에 맞는 배치 처리를 위한 Custom ItemReader/ItemWriter 구현 (0) 2024.12.10 7. MyBatisPagingItemReader로 DB내용을 읽고, MyBatisItemWriter로 DB에 쓰기 (2) 2024.11.18 5. JdbcPagingItemReader로 DB내용을 읽고, JdbcBatchItemWriter로 DB에 쓰기 (0) 2024.11.05 4. FlatFileItemReader로 단순 파일 읽고, FlatFileItemWriter로 파일에 쓰기 (0) 2024.11.04