까먹기전에 짧게 정리. 분명 어노테이션을 적용했는데도 롤백이 되지 않아서 찾아봤다.
앙딱정
1. @Transactionl 어노테이션을 썼다 해도 try-catch문으로 예외 처리를 한다면 롤백이 적용되지않는다. 따라서 catch문에서 예외를 다시 발생시키거나, 강제로 롤백을 실행해야한다.
2. 체크드 예외를 적용했을 경우 따로 어노테이션에 rollbackFor 속성을 추가해야한다.
🌈Try-cath 문 사용 시
한 줄 정 리 : catch문 안에 throw new Exception(); 을 넣어서 예외를 발생시켜야 한다
방법1 | 예외 재발생
@Transactional
public void yourMethod() {
try {
// 비즈니스 로직
} catch (Exception e) {
// 예외를 로깅하거나 추가 작업 수행
System.out.println("Exception occurred: " + e.getMessage());
// 예외를 다시 발생시켜 롤백 트리거
throw new RuntimeException("Forced rollback due to exception", e);
}
}
방법 2 | 롤백 강제
import org.springframework.transaction.interceptor.TransactionAspectSupport;
@Transactional
public void yourMethod() {
try {
// 비즈니스 로직
} catch (Exception e) {
// 롤백 강제
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
System.out.println("Rollback forced due to exception: " + e.getMessage());
}
}
🚀체크드 예외
체크드 예외(Checked Exception)는 기본적으로 롤백되지 않음
- rollbackFor 속성을 통해 롤백 대상을 명시적으로 설정해야 함.
한 줄 정 리 : throws로 던지는 예외가 존재하는 경우에는 rollbackFor 속성을 추가해라
예시
@Transactional(rollbackFor = Exception.class)
public void yourMethod() throws IOException {
throw new IOException("Checked exception occurred");
}
728x90
'🌐 웹개발 > 웹 개발' 카테고리의 다른 글
[Spring boot | Nuxt | Vue] 외부 접근 허용 CORS에러 (0) | 2025.01.31 |
---|---|
오즈리포트, 정리를 안 할 수가 없다 (1) | 2024.09.13 |
[jQuery | 제이쿼리] 유효성 검사 플러그인 jQuery Validation Plugin (0) | 2024.03.18 |
| JS 자바스크립트 | 자바스크립트 엔진 / 실행 컨텍스트 / 스코프 (0) | 2024.03.13 |
이클립스 Eclipse ES6 문법 오류 | 빨간 밑줄 없애기 (0) | 2024.02.19 |