728x90
반응형
😎본론
로직을 구현하다가 아래와 같은 상황을 마주한 적이 있었다.
트랜잭션 내에서 쿼리작업을 진행하다가 validation을 통해 걸렸을 때 에러는 발생하지 않고,
지금까지 변경된 쿼리를 롤백을 시켜야 할 떄
@Transactional 은 Exception 이 발동할 때만 롤백을 시킨다.
🤔그러면 어떻게 롤백을 시켜야할까?
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
트랜잭션이 롤백하는 방법을 강제적으로 넣어주는 것이다.
setRollbackOnly 을 통해 트랜잭션이 종료되었을 때 무조건 롤백을 시키도록 설정하는 것이다.
물론 해당 로직은 리팩토링 작업을 통해 validation과 쿼리작업을 분리하였다.
당장 테스트를 해야했던 상황이라 리팩토링할 시간이 없어서 잠깐 사용했었지만,
위 방식을 사용할 때에는 다른 방법은 없는지 생각해보는 것도 좋은 방법일 것 같다.
728x90
반응형
'JVM > Spring' 카테고리의 다른 글
[SPRING] synchronized와 @Transactional 을 동시에 사용 시 문제점 (5) | 2021.08.16 |
---|---|
[SPRING] AOP 우선순위 설정하기. (2) | 2021.08.14 |
[SPRING] Spring AOP Proxy - @Transactonal 사용 시 주의사항 (0) | 2021.07.25 |
[SPRING] feign은 뭘까? (0) | 2021.04.18 |
[SPRING]@Transactional Annotation 알고 쓰자 (0) | 2021.04.17 |