해당 에러로그가 남겨져있어서 원인을 파악해보았다..!
UnexpectedRollbackException Transaction silently rolled back because it has been marked as rollback-only
트랜잭션에서 트랜잭션 열었을 때, default는
PROPAGATION_REQUIRED로 되기때문에 상위 트랜잭션에 합류된다.
만약 하위 트랜잭션에서 롤백이 터지면, 상위에서 try, catch를 쓰더라도 롤백이 되게 된다.
@Transactional
public void transactionMethod1(){
try{
trasactionalService.transacationalMethod2();
} catch(Exception ignored) {
}
}
@Trasactional
public void transacationMethod2(){
throw new RuntimeException();
}
여기서 상위의 1에 아래서 2에서 터질 것을 try,catch로 감싸놔도 상위까지 롤백이 터진다.
관련해선 우형 글에서 자세히 얘기해준다.
https://techblog.woowahan.com/2606/
HeuristicCompletionException 해당 익셉션은 우리가 multiTenancy 구조이고 ChainedTransactionManager 를 쓰기때문에 상단에서 찍어준다...
착각한 부분은 @Transactional 1개에서 이루어진다고 생각했는데,
내부에서 Interface를 implements 하는 service의 일부 메서드에 @Transactional이 달려있었다.. ㅠ
그냥 생각난김에 적어봤다!
'일상 > 회고' 카테고리의 다른 글
스프링 필터 ignoring 미적용 사례 (0) | 2023.11.03 |
---|---|
API 동시 요청으로 인한 NPE 이슈 (개발 환경 간 다른 결과 발생) (0) | 2023.09.01 |
Repeatable read 의 Phantom read와 Consistent read의 문제점 (1) | 2023.08.08 |
Teams Hook API를 통한 팀즈 알림 처리 - Spring (0) | 2023.08.02 |
io.jsonwebtoken.MalformedJwtException: JWT strings must contain exactly 2 period characters. Found: 0 (0) | 2023.07.26 |
댓글