본문 바로가기

Spring Batch27

Spring Batch Paging Reader 사용시 같은 조건의 데이터를 읽고 수정할때 문제 안녕하세요. 이번 시간에는 Spring Batch를 사용하시는 분들이 자주 묻는 질문 중 하나인 같은 조건의 데이터를 읽고 수정할때 어떻게 해야하는지 에 대해서 소개드리려고 합니다. 모든 코드는 Github에 있으니 참고하시면 됩니다. 문제 상황 예를 들어 아래와 같은 문제가 있다고 가정하겠습니다. pay라는 테이블에 successStatus가 false인 데이터를 모두 가져와 true로 변환해야 한다고 보겠습니다. 샘플로 사용할 Pay Entity는 다음과 같습니다. import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; import javax.persistence.Entity; import javax.persi.. 2018. 9. 15.
7. Spring Batch 가이드 - ItemReader 앞의 과정들을 통해 Spring Batch가 Chunk 지향 처리를 하고 있으며 이를 Job과 Step으로 구성되어 있음을 배웠습니다. Step은 Tasklet 단위로 처리되고, Tasklet 중에서 ChunkOrientedTasklet을 통해 Chunk를 처리하며 이를 구성하는 3 요소로 ItemReader, ItemWriter, ItemProcessor가 있음을 배웠습니다. 즉, ItemReader & ItemWriter & ItemProcessor의 묶음 역시 Tasklet이란 이야기입니다. 이들의 묶음을 ChunkOrientedTasklet에서 관리하기 때문이죠. 이번 시간부터 이 3 요소를 차근차근 배워보겠습니다. 7-1. ItemReader 소개 Spring Batch의 Chunk Taskle.. 2018. 9. 14.
6. Spring Batch 가이드 - Chunk 지향 처리 Spring Batch의 큰 장점 중 하나로 Chunk 지향 처리를 얘기합니다. 이번 시간에는 Chunk 지향 처리가 무엇인지 한번 살펴보겠습니다. 6-1. Chunk? Spring Batch에서의 Chunk란 데이터 덩어리로 작업 할 때 각 커밋 사이에 처리되는 row 수를 얘기합니다. 즉, Chunk 지향 처리란 한 번에 하나씩 데이터를 읽어 Chunk라는 덩어리를 만든 뒤, Chunk 단위로 트랜잭션을 다루는 것을 의미합니다. 여기서 트랜잭션이라는게 중요한데요. Chunk 단위로 트랜잭션을 수행하기 때문에 실패할 경우엔 해당 Chunk 만큼만 롤백이 되고, 이전에 커밋된 트랜잭션 범위까지는 반영이 된다는 것입니다. Chunk 지향 처리가 결국 Chunk 단위로 데이터를 처리한다는 의미이기 때문에 그.. 2018. 8. 25.
5. Spring Batch 가이드 - Spring Batch Scope & Job Parameter 이번 시간에는 Spring Batch의 Scope에 대해서 배워보겠습니다. 여기서 말하는 Scope란 @StepScope, @JobScope를 얘기합니다. 무의식적으로 사용하는 이 어노테이션들이 실제로 어떤 일들을 하는지 알아보겠습니다. 그리고 이 둘과 떨어질 수 없는 Job Parameter도 함께 배워보겠습니다. 5-1. JobParameter와 Scope Spring Batch의 경우 외부 혹은 내부에서 파라미터를 받아 여러 Batch 컴포넌트에서 사용할 수 있게 지원하고 있습니다. 이 파라미터를 Job Parameter라고 합니다. Job Parameter를 사용하기 위해선 항상 Spring Batch 전용 Scope를 선언해야만 하는데요. 크게 @StepScope와 @JobScope 2가지가 있.. 2018. 8. 17.
4. Spring Batch 가이드 - Spring Batch Job Flow 자 이번 시간부터 본격적으로 실전에서 사용할 수 있는 Spring Batch 내용들을 배워보겠습니다. 작업한 모든 코드는 Github에 있으니 참고하시면 됩니다. 앞서 Spring Batch의 Job을 구성하는데는 Step이 있다고 말씀드렸습니다. Step은 실제 Batch 작업을 수행하는 역할을 합니다. 이전에 작성한 코드를 보시면 Job은 코드가 거의 없죠? 실제로 Batch 비지니스 로직을 처리하는 (ex: log.info()) 기능은 Step에 구현되어 있습니다. 이처럼 Step에서는 Batch로 실제 처리하고자 하는 기능과 설정을 모두 포함하는 장소라고 생각하시면 됩니다. Batch 처리 내용을 담다보니, Job 내부의 Step들간에 순서 혹은 처리 흐름을 제어할 필요가 있는데요. 이번엔 여러 .. 2018. 8. 12.
3. Spring Batch 가이드 - 메타테이블엿보기 이번 시간에는 Spring Batch의 메타 테이블에 대해 좀 더 자세히 살펴보겠습니다. 작업한 모든 코드는 Github에 있으니 참고하시면 됩니다. 지난 시간에 Spring Batch의 메타 테이블을 살짝 보여드렸는데요.이 메타 테이블들의 역할이 무엇인지, 어떤 것들을 담고 있는지 실습을 통해 하나씩 소개드리겠습니다. 3-1. BATCH_JOB_INSTANCE 먼저 볼 것은 BATCH_JOB_INSTANCE 입니다. 로컬 MySQL에서 조회를 해보면 아래와 같이 1개의 ROW가 검색이 됩니다. JOB_INSTANCE_ID BATCH_JOB_INSTANCE 테이블의 PK JOB_NAME 수행한 Batch Job Name 방금 실행했던 simpleJob이 있는 것을 볼 수 있습니다. BATCH_JOB_IN.. 2018. 8. 5.