1) 데이터 일부가 read/write이 안된다..
같은 Entity를 Reader로 읽고, Writer로 Update하려니까 전체가 100개라고 하면 약 50개 밖에 Update가 안되는 문제가 있었다. JpaPagingItermReader를 사용해서 그런 것이었고, 원인은 update를 chunk 단위로 함에 따라 limist과 offset를 이용해 select하는 결과값이 달라져서였다. 해결 방법은 Cursor를 사용하거나 PagingReader를 Overriding 하는 것이고, 자세한 내용은 아래에 글에 나와있다. (빨리 원인을 찾고 해결해서 다행..ㅠ)
https://jojoldu.tistory.com/337
2) 데이터를 가공해야만 한다..
DB에 저장된 원본 데이터 1row를 읽고 다른 테이블에 1row를 저장하는 설계를 바탕으로 개발을 했는데 N rows : 1 row의 데이터 연관관계가 있었다; 이에 따라 N rows를 1rows로 만드는 Step(2개)을 만들어 메인 Step전에 수행시켜 줬다.
Main Step이 실행되기 전에 Sub1과 Sub2를 거쳐야 하며 Sub1이 실패가 나던, Sub2가 실패가 나던 무조건 StepMain은 실행해야 되는 논리구조다.
- Sub1, Sub2 둘 다 실패가 나더라도 Step Main 은 실행
- Sub1이 실패하면 Sub2->Main, Sub2가 실패하면 면 Sub1->Main
위와 같은 논리 구조를 아래와 같이 구현해봤는데, 살짝 의구심이 들었지만 테스트를 해보니 원하는 대로 동작한다.
@Bean
public Job expirationNotificationJob() {
return jobBuilderFactory.get("expirationNotificationJob")
.start(sub1ExpirationStep())
.on("*")
.to(sub2ExpirationStep())
.on("*")
.to(mainExpirationStep())
.on("*")
.end()
.end()
.build();
}
'스프링 > Spring Batch' 카테고리의 다른 글
Spring Cloud Data Flow & Spring Batch 사용 (실패), docker-compose 파일 (0) | 2023.03.22 |
---|---|
Spring Batch를 사용하며 맞닥뜨린 상황 기록 02 (0) | 2023.02.28 |
스프링배치 핵심 개념 체크를 위한 Questions (메타데이터 테이블, skip&retry, chunk oriented, cursor & paging 등) (0) | 2022.11.16 |
Spring Batch - @JobScope, @StepScope / LocalDate 사용법 (0) | 2022.10.25 |
Spring Batch 에 대한 이해 (0) | 2021.02.08 |