본문으로 바로가기

DB 격리성에 의한 트랜잭션 문제

category Backend/Spring 2018. 2. 27. 16:21
    반응형

    문제 발생


    1. AOP 트랜잭션으로 묶여있는 리스너 함수 호출


    2. 함수에서 로그를 DB에 삽입하고, DB에서 경기와 경기 로그를 DB에서 가져옴.


    3. 경기에 저장한 로그 정보가 안들어가 있음....


    4. 무슨일이지????


    5. 하나로 트랜잭션이 묶여있어 커밋이 안된 상태로 조회했기 때문이라고 생각함.


    6. AOP  트랜잭션말고 TrasactionTemplate를 사용. PROPAGATION_REQUIRED_NEW을 사용하여. 새로운 트랜잭션을 생성하게함.


    7. LogChainedTransactionManager를 보니까 새로 트랜잭션이 잘만들어지고 커밋도 잘됌.


    8. 근데 왠일 여전히 경기에 삽입된 로그를 들고 있지 않음..


    9. 삽질

    : PlatformTransactionManager, LogChainedTransactionManager 분석 해보고 구글 서칭하고..


    10. 갑자기 격리성이 생각남


    11. 아무리 새로운 트랜잭션을 만들어도 기존에 있던 트랜잭션 격리성이 REPEATABLE_READ이면 갱신된 자료 안보임.


    12. mysql 로컬 디비 보니까. show variables like '%tx%'; 격리성 REPEATABLE_READ임


    13.  원인 찾음


    14. 메소드에 @Trasactional 어노테이션 지우고 trasactionTemplate로 로그 삽입 및 경기 조회 업데이트 작업을 2개의 트랜잭션으로 나눔.


    15. 해결



    반응형