gpt4 book ai didi

Spring 多事务管理器,单事务

转载 作者:行者123 更新时间:2023-12-04 11:28:46 24 4
gpt4 key购买 nike

我有一个复杂的情况,我必须使用 2 个不同的数据库,因为我使用了 2 个不同的事务管理器。 Spring 有没有办法将这些事务管理器链接到单个事务中?如果第二个数据源发生异常,则应回滚第一个数据源的更改。

<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>

最佳答案

您可以使用 Spring 的 JtaTransactionManager确保两个数据库都与一个事务管理器进行事务处理。
请注意,您必须选择一个底层实现,它可以是容器的实现:例如WebLogic、WebSphere 和 OC4J 等。或者是独立的,甚至是开源的:例如Atomikos .
然而
XA 事务管理使事情复杂化(配置/性能/问题解决/维护等)。在很多情况下,它可以通过巧妙的模式来避免。
要深入了解是否需要使用 XA(例如分布式)事务管理器,请查看 Spring 自己的 Dave Syer 撰写的这篇精彩文章:Distributed transactions in Spring, with and without XA

关于Spring 多事务管理器,单事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8892887/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com