웅깅카
307
2021-06-14 17:18:48 작성 2021-06-14 17:20:26 수정됨
2
119

아까전에 exception시 롤백 처리 질문했던 신입입니다..ㅠㅠ


하나의 메소드에

transactional이 걸려있을경우

그 메소드안에서 두개의 db crud가 발생할때

하나라도 실패시 전부 롤백이 되는걸로 공부했습니다..


근데 제가 지금 구현하고있는건


회원이 결제를 할시에 포인트를 차감해주는 service를 하나 실행하고나서

회원의 포인트가 변경되는 save가 발생하고 끝나고나서 


회원의 포인트가 잘 변경된 뒤

리워드나 부가세나 원천징수 같은걸 또 남겨야하는 save jpa를 따로 또

service를 호출하여 실행해서 db에서 예외가 발생할경우에는 위에서 회원 포인트 변경한 update db가 롤백이 되는걸 확인했는데요


음 이런 db의 예외말고도 값이 잘못 할당되거나 개발자의 코드 실수로 인하여나

예기치 못한 곳에서 예외가 발생할까봐 예외처리를 해준경우에

ex) 회원 포인트 변경 로직 완료 후 String a를 가지고 작업을 하다가 예외가 발생할까봐 예외처리를 해준경우 (npe) 이런 경우에는 회원 포인트가 변경된 db가 롤백이 안되더라구요

근데 catch문에 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); 이걸 걸어줄 경우에 롤백이 되더라구요. db에 관련된 에러의 경우말고 다른 npe나 이런 익셉션을 날려줄 경우에는 rollback처리를 위해서는 강제 롤백을 catch문에 해주는 방법밖에 없을까요?


로직이 구현된 메소드에는 transactional 어노테이션이 걸려있고

service단에도 transactional이 걸려있습니다.!!

0
  • 답변 2

  • 냉동참치
    800
    2021-06-14 17:31:21

    관련하여 설명이 되어있는 블로그 내용입니다.

    https://pjh3749.tistory.com/269

  • 웅깅카
    307
    2021-06-14 17:53:49

    @냉동참치

    읽어봤습니다..

    그래서 메소드에 rollbackFor 옵션을 걸어줬는데도

    일반적인 예외에서는 롤백이 안되더라구요..

  • 로그인을 하시면 답변을 등록할 수 있습니다.