[SPRING] 여러 트랜잭션 관리자를 단일 트랜잭션으로 처리
SPRING여러 트랜잭션 관리자를 단일 트랜잭션으로 처리
두 개의 서로 다른 데이터베이스를 사용해야하는 복잡한 상황이 있습니다. 거기에는 두 개의 다른 트랜잭션 관리자를 사용합니다. Spring에서 이러한 트랜잭션 관리자를 단일 트랜잭션으로 연결하는 방법이 있습니까? 두 번째 dataSource에 대한 예외의 경우 첫 번째 변경은 롤백되어야합니다.
<bean id="baseTransactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true">
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@dummyHost:1521:dummySID" />
<property name="username" value="owner" />
<property name="password" value="password" />
</bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="dataSource2" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@dummyHost2:1521:dummySID2" />
<property name="username" value="owner" />
<property name="password" value="password" />
</bean>
<bean id="transactionManager2" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource2" />
</bean>
해결법
-
==============================
1.2 단계 커밋 (XA)을 지원하는 글로벌 트랜잭션 관리자가 필요합니다. 여러 독립적이고 무료로 사용할 수 있습니다. 저는 Spring 기반 프로젝트에서 Bitronix를 사용해 왔지만, Atomikos와 아마 다른 것들도 있습니다. http://en.wikipedia.org/wiki/Java_Transaction_API#Opensource_JTA_implementations를 참조하십시오.
2 단계 커밋 (XA)을 지원하는 글로벌 트랜잭션 관리자가 필요합니다. 여러 독립적이고 무료로 사용할 수 있습니다. 저는 Spring 기반 프로젝트에서 Bitronix를 사용해 왔지만, Atomikos와 아마 다른 것들도 있습니다. http://en.wikipedia.org/wiki/Java_Transaction_API#Opensource_JTA_implementations를 참조하십시오.
-
==============================
2.Spring의 JtaTransactionManager를 사용하여 두 DB가 단일 트랜잭션 관리자로 트랜잭션되도록 할 수 있습니다.
Spring의 JtaTransactionManager를 사용하여 두 DB가 단일 트랜잭션 관리자로 트랜잭션되도록 할 수 있습니다.
컨테이너의 컨테이너가 될 기본 구현을 선택해야합니다. WebLogic, WebSphere 및 OC4J 등. 또는 독립형, 심지어 오픈 소스 중 하나 : 예. Atomikos.
XA 트랜잭션 관리는 상황 (구성 / 성능 / 문제점 해결 / 유지 보수 등)을 복잡하게 만듭니다. 그리고 많은 경우에 영리한 패턴으로 피할 수 있습니다.
XA (분산 트랜잭션) 매니저를 사용해야하는지 여부에 대한 확실한 이해를 얻으려면 Spring의 Dave Syer가 작성한 환상적인 기사 인 Spring의 분산 트랜잭션 (XA 포함 / 제외)을 살펴보십시오.
-
==============================
3.여러 데이터 소스를 통한 라우팅의 경우 abstractRoutingDataSource를 사용할 수 있지만 하나의 롤백이 다른 것에 영향을주는 것과 같은 요구 사항이있는 경우 분산 txn 관리를위한 JtaTransactionManager가 필요합니다.
여러 데이터 소스를 통한 라우팅의 경우 abstractRoutingDataSource를 사용할 수 있지만 하나의 롤백이 다른 것에 영향을주는 것과 같은 요구 사항이있는 경우 분산 txn 관리를위한 JtaTransactionManager가 필요합니다.
from https://stackoverflow.com/questions/8892887/spring-multiple-transaction-managers-single-transaction by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] JPA와 Hibernate 주석 간의 관계 (0) | 2019.03.17 |
---|---|
[SPRING] 스프링 웹 애플리케이션 상태 점검 (0) | 2019.03.17 |
[SPRING] Spring Framework 애플리케이션에서 Beans.xml 설정 파일 사용에 관하여 (0) | 2019.03.17 |
[SPRING] 스프링 보안의 수동 인증 로직은 어디로 가야합니까? - 서비스 계층 또는 프리젠 테이션 계층? (0) | 2019.03.17 |
[SPRING] Jersey 2와 Spring을 Java 기반 구성과 통합 (0) | 2019.03.17 |