[SPRING] 평신도의 봄 전파 예제
SPRING평신도의 봄 전파 예제
Spring 문서는 트랜잭션 전파 특성을 설명하는 훌륭한 작업을 수행합니다.
그러나, 나는 일반인의 관점에서 이러한 속성 각각을 더 철저하게 설명하는 잘 알려진 실세계 예제가 있는지 궁금해하고있었습니다.
해결법
-
==============================
1.PROPAGATION_REQUIRED
PROPAGATION_REQUIRED
class Service { @Transactional(propagation=Propagation.REQUIRED) public void doSomething() { // access a database using a DAO } }
doSomething ()을 호출하면 호출자가 아직 트랜잭션을 시작하지 않은 경우 새 트랜잭션이 시작됩니다.
이 메소드의 호출자가 트랜잭션을 이미 시작한 경우 호출자의 트랜잭션이 사용되고 새 트랜잭션이 작성되지 않습니다 (즉, 하나의 트랜잭션이 있음).
doSomething () 내부에서 예외가 발생하면 롤백되어 호출자가 롤백 된 트랜잭션을 볼 수 있습니다.
doSomething ()이 반환 할 때 트랜잭션은 아직 커밋되지 않았습니다. 트랜잭션을 커밋 할 호출자입니다 (또는 롤백 할 수도 있음).
PROPAGATION_REQUIRES_NEW
class Service { @Transactional(propagation=Propagation.REQUIRES_NEW) public void doSomething() { // access a database using a DAO } }
doSomething ()이 호출되면 항상 새 트랜잭션이 시작됩니다.
이 메소드의 호출자가 이미 트랜잭션 (TxnOuter)을 시작한 경우 호출자의 트랜잭션이 일시 중단되고 새 트랜잭션 (TxnInner)이 작성됩니다 (즉, 두 개의 트랜잭션이 있음).
doSomething () 내부에서 예외가 throw되면 TxnInner는 롤백되지만 호출자 (TxnOuter)의 "일시 중단 된"트랜잭션은 영향을받지 않습니다.
doSomething ()이 예외없이 반환하면 트랜잭션 (TxnInner)을 커밋합니다. 호출자의 트랜잭션 (TxnOuter)이 재개되고 다른 트랜잭션이 커밋되었음을 알지 못합니다. 그러면 발신자는 TxnOuter가 적합하다고 생각한대로 커밋하거나 롤백 할 수 있습니다.
중요한 점은 데이터베이스가 TxnOuter와 TxnInner를 완전히 독립적 인 트랜잭션으로보고 따라서 두 개의 독립 커밋을 보는 것입니다.
PROPAGATION_NESTED
class Service { @Transactional(propagation=Propagation.NESTED) public void doSomething() { // access a database using a DAO } }
NESTED는 JDBC 드라이버 및 / 또는 데이터베이스가 JDBC 저장 점을 지원하는 경우에만 사용할 수 있습니다.
doSomething ()을 호출하면 호출자가 아직 트랜잭션을 시작하지 않은 경우 새 트랜잭션이 시작됩니다.
이 메소드의 호출자가 트랜잭션을 이미 시작한 경우 호출자의 트랜잭션이 사용되고 새 트랜잭션이 작성되지 않습니다 (즉, 하나의 트랜잭션이 있음). 그러나 doSomething ()을 입력하면 트랜잭션에 "세이브 포인트"가 표시됩니다.
예외가 doSomething () 내부에 던져지면 트랜잭션은 부분적으로 트랜잭션을 "저장 점"으로 롤백 할 수 있습니다. 호출자는 트랜잭션을 계속 진행합니다.
doSomething ()이 Exception없이 반환하면 전체 트랜잭션을 커밋 (또는 롤백) 할 호출자입니다.
주목해야 할 중요한 점은 데이터베이스는 하나의 트랜잭션 만보고 하나의 커밋 만 있다는 것입니다.
from https://stackoverflow.com/questions/25076718/spring-propagation-examples-in-laymans-terms by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Java Dependency Injection : XML 또는 주석 (0) | 2019.03.02 |
---|---|
[SPRING] 매개 변수가있는 JUnit SpringJUnit4ClassRunner를 실행하는 방법 (0) | 2019.03.01 |
[SPRING] jsonpath가있는 회원 수를 계산 하시겠습니까? (0) | 2019.03.01 |
[SPRING] 다중 모듈 스프링 구성은 어떻게합니까? (0) | 2019.03.01 |
[SPRING] PooledConnectionFactory 또는 CachingConnectionFactory가 더 좋습니다. (0) | 2019.03.01 |