Spring/Spring

[Spring][Data Access] 1-4. Transaction Manager: Declarative Transaction Management

noahkim_ 2024. 8. 11. 10:44

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); // 로그 기록 작업
}

 

 

 

출처