1) 데이터 일부가 read/write이 안된다..

같은 Entity를 Reader로 읽고, Writer로 Update하려니까 전체가 100개라고 하면 약 50개 밖에 Update가 안되는 문제가 있었다. JpaPagingItermReader를 사용해서 그런 것이었고, 원인은 update를 chunk 단위로 함에 따라 limist과 offset를 이용해 select하는 결과값이 달라져서였다. 해결 방법은 Cursor를 사용하거나 PagingReader를 Overriding 하는 것이고, 자세한 내용은 아래에 글에 나와있다. (빨리 원인을 찾고 해결해서 다행..ㅠ)

 

https://jojoldu.tistory.com/337

 

 

Spring Batch Paging Reader 사용시 같은 조건의 데이터를 읽고 수정할때 문제

안녕하세요. 이번 시간에는 Spring Batch를 사용하시는 분들이 자주 묻는 질문 중 하나인 같은 조건의 데이터를 읽고 수정할때 어떻게 해야하는지 에 대해서 소개드리려고 합니다. 모든 코드는 Githu

jojoldu.tistory.com

 

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();
    }

+ Recent posts