@Transactional (propagation = Propagation.REQUIRED)


답변:


65

전파 설정이 PROPAGATION_REQUIRED이면 설정이 적용되는 각 메서드에 대해 논리적 트랜잭션 범위가 생성됩니다. 이러한 논리적 트랜잭션 범위는 각각 롤백 전용 상태를 개별적으로 결정할 수 있으며, 외부 트랜잭션 범위는 내부 트랜잭션 범위와 논리적으로 독립적입니다. 물론 표준 PROPAGATION_REQUIRED 동작의 경우 이러한 모든 범위가 동일한 물리적 트랜잭션에 매핑됩니다. 따라서 내부 트랜잭션 범위에 설정된 롤백 전용 마커는 실제로 커밋 할 수있는 외부 트랜잭션의 기회에 영향을줍니다 (예상대로).

여기에 이미지 설명 입력

http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html


166

스프링 문서 에서 제공하는 것 이상의 사용에 대한 평신도 설명이 필요한 경우

이 코드를 고려하십시오 ...

class Service {
    @Transactional(propagation=Propagation.REQUIRED)
    public void doSomething() {
        // access a database using a DAO
    }
}

doSomething ()이 호출되면 실행하기 전에 데이터베이스에서 트랜잭션을 시작해야 함을 알고 있습니다. 이 메서드의 호출자가 이미 트랜잭션을 시작한 경우이 메서드는 현재 데이터베이스 연결에서 동일한 실제 트랜잭션을 사용 합니다.

@Transactional주석은 코드가 실행될 때 트랜잭션 이 있어야 함을 알리는 수단을 제공합니다 . 하나 없이는 실행되지 않으므로 데이터베이스에 불완전한 데이터가 남아 있지 않거나 예외가 발생하면 정리해야한다는 코드를 코드에서 가정 할 수 있습니다.

트랜잭션 관리는 상당히 복잡한 주제이므로이 간단한 답변이 도움이되기를 바랍니다.



프록시 기반 구성을 사용하여 DAO 계층을 선언하고 액세스하는 경우 DAO 클래스에 대한 메서드도 @Transactional로 주석 처리해야합니다.
Kurapika 2017

당신이 추가 한 경우 @Transactional서비스 계층도 추가 할 더 이상 필요가 없다 @TransactionalDAO를 방법은 해당 트랜잭션 내에서 호출되기가.
Brad

경우 doSomething()어떤 @Transactional없이 호출하는 또 다른 중첩 된 방법이 동일한 트랜잭션뿐만 아니라 그 호출 방법에 적용 할 것인가?
thisarattr

예, 중첩 된 메서드를 실행하는 데 동일한 스레드가 사용되는 한 (즉, 새 스레드를 명시 적으로 만들지 않음). 이는 Spring 트랜잭션이 ThreadLocal 변수를 사용하여 현재 스레드에 바인딩되기 때문입니다
Brad

15

Spring 애플리케이션에서 @Transactional (propagation = Propagation.REQUIRED)<tx:annotation-driven/>클래스 / 메소드를 사용하여 주석 기반 트랜잭션 지원을 활성화 하고 주석을 달면 Spring 프레임 워크는 트랜잭션을 시작하고 메서드를 실행하고 트랜잭션을 커밋합니다. RuntimeException이 발생하면 트랜잭션이 롤백됩니다.

실제로 propagation = Propagation.REQUIRED는 기본 전파 수준이므로 명시 적으로 언급 할 필요가 없습니다.

추가 정보 : http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html#transaction-declarative-annotations


5

같은 트랜잭션 관리를 위해 채택 된 다양한 트랜잭션 설정과 행동, 이해하기 REQUIRED, ISOLATION등 당신은 트랜잭션 관리 자체의 기초를 이해해야합니다.

자세한 설명은 Trasaction management 를 읽어 보세요.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.