1. Declarative Transaction Management
- 선언적으로 트랜잭션 정의 (Annotation, XML)
- 코드 내에서 직접 트랜잭션 관리 X
AOP 사용
- 실제 트랜잭션 경계 설정 및 관리 자동화 (비침투적)
- 세밀한 트랜잭션 동작 제어 (Advice 추가 가능)
롤백 규칙
- 기본적으로 unchecked exception에 대해 자동 롤백 (checked exception 자동 롤백 X)
- 롤백 규칙을 설정하여 특정 예외 발생 시, 자동 롤백을 설정할 수 있음
// 트랜잭션 전파와 롤백 규칙 설정
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public void updateUserEmail(Long userId, String newEmail) throws Exception {
User user = userRepository.findById(userId)
.orElseThrow(() -> new Exception("User not found"));
user.setEmail(newEmail);
userRepository.save(user); // 데이터베이스 업데이트 작업
// 특정 조건에서 예외 발생 (예를 들어, 이메일 검증 실패)
if (newEmail.equals("invalid-email")) {
throw new IllegalArgumentException("Invalid email format");
}
Log log = new Log("User updated: " + user.getUsername());
logRepository.save(log); // 로그 기록 작업
}
출처