[java] @Transactional (propagation = Propagation.REQUIRED)

어떤 사람이이 주석이하는 일과 정확히 언제 사용하는지 설명 할 수 있다면 :

@Transactional(propagation=Propagation.REQUIRED)

감사



답변

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

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


답변

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


답변

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

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


답변