Post

Java - 수동 Transaction Rollback

개발을 하다보면 이런저런 이유로 트랜잭션을 수동으로 조작해줘야 하는 경우가 있습니다. 예를 들어 쿼리 실행에 문제가 없었지만 특정 값을 받으면 예외 발생없이 정상적으로 진행하면서도 롤백은 해야하는 경우들입니다. 이럴 땐 어떻게 할까요?

TransactionAspectSupport 클래스?

TransactionAspectSupport는 Spring 프레임워크에서 트랜잭션 관리를 지원하는 클래스입니다.
주로 AOP(Aspect-Oriented Programming)를 사용하여 트랜잭션 경계를 설정하고, 트랜잭션의 시작, 커밋, 롤백을 처리합니다. 또한 트랜잭션 어드바이스(advice)와 트랜잭션 매니저(transaction manager)를 결합하여 트랜잭션의 일관성과 원자성을 보장합니다.

setRollbackOnly() 호출하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@Transactional
public void myMethod() {
  insertMethod();
  updateMethod();
  deleteMethod();
  
  boolean result = verifyMethod();

  if(!result) {
    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  }
}

/*
* currentTransactionStatus()로 현재 트랜잭션을 TransactionStatus 클래스로 가져온 후
* 해당 클래스의 setRollbackOnly()를 호출합니다.
* 이는 현재 트랜잭션이 종료될 때 무조건 Rollback하도록 설정합니다.
*/

위와 같이 사용할 수 있습니다.
감사합니다.

This post is licensed under CC BY 4.0 by the author.