2010-05-02 6 views
9

스프링 트랜잭션 전파에 관한 질문이 있습니다. 사용하는 경우 @Transactional (propagation = Propagation.REQUIRED)을 사용하여 m1 메서드에 주석을 추가합니다. 실행 논리가 m1을 입력하면 이미 트랜잭션이있는 경우 m1이 트랜잭션을 사용합니다. m1 이후에는 거래가 어떻게됩니까? 끝나거나 여전히 열려 있습니까? (다른 메서드에서 m1을 호출하고 호출 한 후에도 여전히 다른 작업이 있습니다).스프링 트랜잭션 전파에 관한 질문

요약하면 주석이 달린 메소드를 종료 할 때 트랜잭션이 종료되거나 열리는 것을 알고 싶습니다.

대단히 감사합니다.

답변

17

Propagation.REQUIRED (문서 번호 here)은 (현재 스레드가 없으면) 새 트랜잭션을 만들거나 기존 트랜잭션 (존재하는 경우)에 가입합니다.

메서드가 끝나면 트랜잭션이 완료되고 (메서드를 입력하면 트랜잭션이 만들어집니다) 트랜잭션이 열립니다 (메서드가 입력되었을 때 트랜잭션이 이미 존재하는 경우). 다른 말로 표현하자면, 이것은 대칭 적이기 때문에 메소드가 입력되기 전과 동일한 상태로 스레드의 트랜잭션 상태를 남겨 둡니다.

+0

안녕하세요 staffman, 내 질문과 관련하여 다른 전파 수준은 어떻게됩니까? –

+0

@Yousui : 다양한 전파 수준 및 그 효과는 내가 게시 한 링크에 문서화되어 있습니다. – skaffman

+0

답변을 신중하게 읽고 몇 가지 테스트를 한 후 Staffman에게 감사드립니다. 스프링 트랜잭션 전파 정책을 이해했습니다. 도와 줘서 고마워. –