답변:
전파 설정이 PROPAGATION_REQUIRED이면 설정이 적용되는 각 메서드에 대해 논리적 트랜잭션 범위가 생성됩니다. 이러한 논리적 트랜잭션 범위는 각각 롤백 전용 상태를 개별적으로 결정할 수 있으며, 외부 트랜잭션 범위는 내부 트랜잭션 범위와 논리적으로 독립적입니다. 물론 표준 PROPAGATION_REQUIRED 동작의 경우 이러한 모든 범위가 동일한 물리적 트랜잭션에 매핑됩니다. 따라서 내부 트랜잭션 범위에 설정된 롤백 전용 마커는 실제로 커밋 할 수있는 외부 트랜잭션의 기회에 영향을줍니다 (예상대로).
http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html
스프링 문서 에서 제공하는 것 이상의 사용에 대한 평신도 설명이 필요한 경우
이 코드를 고려하십시오 ...
class Service {
@Transactional(propagation=Propagation.REQUIRED)
public void doSomething() {
// access a database using a DAO
}
}
doSomething ()이 호출되면 실행하기 전에 데이터베이스에서 트랜잭션을 시작해야 함을 알고 있습니다. 이 메서드의 호출자가 이미 트랜잭션을 시작한 경우이 메서드는 현재 데이터베이스 연결에서 동일한 실제 트랜잭션을 사용 합니다.
이 @Transactional
주석은 코드가 실행될 때 트랜잭션 이 있어야 함을 알리는 수단을 제공합니다 . 하나 없이는 실행되지 않으므로 데이터베이스에 불완전한 데이터가 남아 있지 않거나 예외가 발생하면 정리해야한다는 코드를 코드에서 가정 할 수 있습니다.
트랜잭션 관리는 상당히 복잡한 주제이므로이 간단한 답변이 도움이되기를 바랍니다.
@Transactional
서비스 계층도 추가 할 더 이상 필요가 없다 @Transactional
DAO를 방법은 해당 트랜잭션 내에서 호출되기가.
doSomething()
어떤 @Transactional없이 호출하는 또 다른 중첩 된 방법이 동일한 트랜잭션뿐만 아니라 그 호출 방법에 적용 할 것인가?
Spring 애플리케이션에서 @Transactional (propagation = Propagation.REQUIRED) 로 <tx:annotation-driven/>
클래스 / 메소드를 사용하여 주석 기반 트랜잭션 지원을 활성화 하고 주석을 달면 Spring 프레임 워크는 트랜잭션을 시작하고 메서드를 실행하고 트랜잭션을 커밋합니다. RuntimeException이 발생하면 트랜잭션이 롤백됩니다.
실제로 propagation = Propagation.REQUIRED는 기본 전파 수준이므로 명시 적으로 언급 할 필요가 없습니다.
같은 트랜잭션 관리를 위해 채택 된 다양한 트랜잭션 설정과 행동, 이해하기 REQUIRED
, ISOLATION
등 당신은 트랜잭션 관리 자체의 기초를 이해해야합니다.
자세한 설명은 Trasaction management 를 읽어 보세요.