JVM/Spring

[SPRING] @Transactional (트랜잭션) 강제 롤백

Hyo Kim 2021. 7. 25. 21:36
728x90
반응형

😎본론

로직을 구현하다가 아래와 같은 상황을 마주한 적이 있었다.

트랜잭션 내에서 쿼리작업을 진행하다가 validation을 통해 걸렸을 때 에러는 발생하지 않고,
지금까지 변경된 쿼리를 롤백을 시켜야 할 떄

 

@Transactional 은 Exception 이 발동할 때만 롤백을 시킨다.

 

🤔그러면 어떻게 롤백을 시켜야할까?

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

트랜잭션이 롤백하는 방법을 강제적으로 넣어주는 것이다.

setRollbackOnly 을 통해 트랜잭션이 종료되었을 때 무조건 롤백을 시키도록 설정하는 것이다.


물론 해당 로직은 리팩토링 작업을 통해 validation과 쿼리작업을 분리하였다.

당장 테스트를 해야했던 상황이라 리팩토링할 시간이 없어서 잠깐 사용했었지만, 

위 방식을 사용할 때에는 다른 방법은 없는지 생각해보는 것도 좋은 방법일 것 같다.

728x90
반응형