[SPRING] Spring에서 트랜잭션 일시 중지는 어떻게 작동합니까?
SPRINGSpring에서 트랜잭션 일시 중지는 어떻게 작동합니까?
내 질문은 기본적으로 여기에있는 것과 같지만 답변에 만족하지 않아서이 질문을 씁니다.
Spring Framework 매뉴얼에서는 PROPAGATION_REQUIRES_NEW에 대해 현재 트랜잭션이 일시 중단 될 것이라고 명시되어 있습니다. 어떻게 실제로 구현됩니까? 대부분의 데이터베이스는 중첩 트랜잭션을 지원하지 않으며 한 연결에서 하나의 트랜잭션 만 실행할 수 있음을 알고 있습니다. 다시 말해 원래 트랜잭션을 커밋하거나 롤백해야하기 때문에 원래 트랜잭션을 "사용하지 않고"새 트랜잭션을 시작할 수는 없습니다.
예:
START TRANSACTION
SELECT ...
UPDATE ...
-- Now we run method with PROPAGATION_REQUIRES_NEW
-- How do we "suspend" transaction so we can start new one?
START TRANSACTION
UPDATE ...
COMMIT
-- We returned from the method, result was commited
-- Now we'd like to "unsuspend" the original transaction so it can be commited/rollbacked, but how?
아니면 다른 연결 (Session 객체)을 사용하여 구현할 수 있습니까? 그래서 우리는 원래의 연결을 사용하지 않고 새로운 트랜잭션을 시작할 수있는 새로운 연결을 만듭니다.
나는 아무 것도 그럴 수 없다는 것을 너무도 명백히 여기에서 놓치고있다. (적어도 Spring docs, Spring in Action, Hibernate를 가진 Spring persistence는 아님).
고마워요!
해결법
-
==============================
1.트랜잭션을 일시 중단하는 지점은 스레드의 현재 트랜잭션을 새로운 트랜잭션으로 변경하는 것입니다. 새 트랜잭션과 일시 중단 된 트랜잭션이 서로 완전히 독립적이므로 중첩 트랜잭션의 의미와 일치하지 않습니다. 트랜잭션을 일시 중단 할 수 있도록 연결 수준 API가 없으므로 다른 연결을 사용하여이 작업을 수행해야합니다. Spring에서 JTA를 사용하고 있다면 JTA 트랜잭션 관리자가이를 수행한다. DataSourceTransactionManager를 사용하는 경우 코드를 살펴보면 현재 연결을 "일시 중단 된 리소스"로 저장하고 새 트랜잭션의 데이터 소스에서 새 연결을 가져 오는 것을 볼 수 있습니다.
트랜잭션을 일시 중단하는 지점은 스레드의 현재 트랜잭션을 새로운 트랜잭션으로 변경하는 것입니다. 새 트랜잭션과 일시 중단 된 트랜잭션이 서로 완전히 독립적이므로 중첩 트랜잭션의 의미와 일치하지 않습니다. 트랜잭션을 일시 중단 할 수 있도록 연결 수준 API가 없으므로 다른 연결을 사용하여이 작업을 수행해야합니다. Spring에서 JTA를 사용하고 있다면 JTA 트랜잭션 관리자가이를 수행한다. DataSourceTransactionManager를 사용하는 경우 코드를 살펴보면 현재 연결을 "일시 중단 된 리소스"로 저장하고 새 트랜잭션의 데이터 소스에서 새 연결을 가져 오는 것을 볼 수 있습니다.
from https://stackoverflow.com/questions/19526604/how-does-transaction-suspension-work-in-spring by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 부트 (Spring Boot)와 MongoDB에 대한 연결 세부 사항 구성 방법 (0) | 2019.04.18 |
---|---|
[SPRING] Spring Boot Embedded tomcat에서 외부 정적 HTML 파일을 서비스하는 방법은? (0) | 2019.04.18 |
[SPRING] Spring AOP로 Hibernate 세션 구성하기 (0) | 2019.04.18 |
[SPRING] Autowiring이 Spring 3.1.2, JUnit 4.10.0에서 작동하지 않습니다. (0) | 2019.04.18 |
[SPRING] Java Spring MVC 템플릿 엔진 (0) | 2019.04.18 |