> Java > java지도 시간 > Spring Boot의 @Transactional 이해

Spring Boot의 @Transactional 이해

WBOY
풀어 주다: 2024-07-16 09:55:56
원래의
1022명이 탐색했습니다.

Understanding @Transactional in Spring Boot

Spring Boot에서 트랜잭션 관리는 @Transactional 주석을 사용하여 수행할 수 있습니다. 이 블로그 게시물에서는 @Transactional을 사용하여 스프링 부트 애플리케이션에서 데이터 일관성을 보장하고 오류 처리를 단순화하는 방법을 살펴보겠습니다.

1. 기본 사용법

@Transactional을 사용하려면 일반적으로 트랜잭션 동작을 원하는 서비스 클래스의 메서드에 @Transactional을 배치합니다.

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class UserService{

    @Transactional
    public void createUser() {
        // enter your transactional code here
    }
}
로그인 후 복사

2. 전파 및 격리 수준

트랜잭션의 전파 및 격리 수준을 지정하여 트랜잭션 작동 방식을 제어할 수 있습니다.

  • 전파: 기존 트랜잭션이 이미 실행 중일 때 트랜잭션이 동작하는 방식을 정의합니다.

  • 격리: 거래의 데이터 가시성 수준을 정의합니다.

@Transactional(propagation = Propagation.REQUIRED, 
              isolation = Isolation.READ_COMMITTED)
public void createUser() {
    // enter your transactional code here
}
로그인 후 복사

3. 롤백 규칙

롤백을 트리거해야 하는 예외를 지정할 수 있습니다.

@Transactional(rollbackFor = Exception.class)
public void createUser() {
    // your transactional code here
}
로그인 후 복사

4. 읽기 전용 트랜잭션

해당 방법이 데이터 읽기만 하고 쓰기 작업을 수행하지 않는 경우 성능 최적화를 위해 읽기 전용으로 표시할 수 있습니다.

@Transactional(readOnly = true)
public void getUser() {
    // your read-only code here
}
로그인 후 복사

5. 클래스 트랜잭션

클래스 수준에 @Transactional을 배치하여 클래스의 모든 메서드에 적용할 수도 있습니다.

@Service
@Transactional
public class UserService {

    public void getUser() {
        // transactional code
    }

    public void createUser() {
        // transactional code
    }
}
로그인 후 복사

트랜잭션 방식을 사용한 서비스 예시

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class UserService {

    @Transactional
    public void saveUser() {
        // code to save data
    }

    @Transactional(readOnly = true)
    public void fetchUser() {
        // code to fetch data
    }

    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void newTransaction() {
        // code to execute in a new transaction
    }

    @Transactional(rollbackFor = {CustomException.class})
    public void performWithRollback() {
        // risky code that may throw CustomException
    }
}
로그인 후 복사

요약

@Transactional Spring Boot를 사용하면 트랜잭션을 선언적으로 관리하여 다양한 시나리오에서 트랜잭션이 작동하는 방식을 정확하게 지정할 수 있습니다. 이는 데이터 일관성을 보장하고 애플리케이션의 오류 처리를 단순화하는 데 도움이 됩니다.

참고자료

https://www.baeldung.com/spring-transactions-read-only

https://docs.spring.io/spring-framework/reference/data-access/transaction/declarative/annotations.html

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/transaction/annotation/Transactional.html

Github: https://github.com/tharindu1998/transactional-blog

위 내용은 Spring Boot의 @Transactional 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿