spring + ibatis 多数据源事务(分布式事务)管理配置方法(转)

ぐ巨炮叔叔 提交于 2019-12-03 18:53:24

1、我先要给大家讲一个概念:spring 的多数据源事务,这是民间的说法。官方的说法是:spring 的分布式事务。明白了这个概念,问题就好解决了。

2、分布式事务的应用场景:工程中使用两个及以上数据库中,就要考虑使用分布式事务管理,否则事务不能回滚。

3、现有两种开源的第三方jar支持spring的分布式事务管理,它们分别是:jotm和Atomikos。通过google可以找到下载的链接,其中atomikos的下载需要先填写email信息,再登录email找到链接去下载。下载地址分别:

1、http://jotm.objectweb.org/

2、http://www.atomikos.com/Main/InstallingTransactionsEssentials

我使用的是jotm。

4、基于spring+ibatis的环境下配置jotm的方法很简单。只城要修改spring数据源的配置及事务的配置及可。以下是我的配置,供参考。

<bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean">
	 <property name="defaultTimeout" value="500000"/>
</bean> 

<bean id="dataSource" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown">
     <property name="dataSource">
             <bean class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown">
                     <property name="transactionManager" ref="jotm"/>
                     <property name="driverName" value="${driverClass}"/>
                     <property name="url" value="${jdbcUrl}"/>
             </bean>
     </property>
     <property name="user" value="${user}"/>
     <property name="password" value="${password}"/>
</bean>

<bean id="dataSourceBbs" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown">
     <property name="dataSource">
             <bean class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown">
                     <property name="transactionManager" ref="jotm"/>
                     <property name="driverName" value="${bbs.driverClass}"/>
                     <property name="url" value="${bbs.jdbcUrl}"/>
             </bean>
     </property>
     <property name="user" value="${bbs.user}"/>
     <property name="password" value="${bbs.password}"/>
</bean> 	

<!-- JTA事务管理器 -->
<bean id="myJtaManager" class="org.springframework.transaction.jta.JtaTransactionManager">
        <property name="userTransaction" ref="jotm" />
</bean> 

 <!-- 事务切面配置 -->
 <aop:config>
         <aop:pointcut id="serviceOperation" expression="execution(* com.bohai.service.impl.*.*(..))"/>
         <aop:advisor pointcut-ref="serviceOperation" advice-ref="txAdvice"  order="0" />
 </aop:config>
 
 <!-- 通知配置 -->
 <tx:advice id="txAdvice" transaction-manager="myJtaManager">
         <tx:attributes>
                 <tx:method name="delete*" propagation="REQUIRED"  />
                 <tx:method name="save*" propagation="REQUIRED"  />
                 <tx:method name="update*" propagation="REQUIRED"  />
                 <tx:method name="*" propagation="REQUIRED"  />
                 <tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
	<tx:method name="get*" propagation="SUPPORTS" read-only="true"/>
	<tx:method name="fetch*" propagation="SUPPORTS" read-only="true"/>
	<tx:method name="*_noTrans" propagation="NOT_SUPPORTED"/>
         </tx:attributes>
 </tx:advice>
5、jtom 还需要一个配置文件 carol.properties ,内容是:
#JNDI调用协议
carol.protocols=jrmp
#不使用CAROL JNDI封装器        
carol.start.jndi=false
#不启动命名服务器
carol.start.ns=false

 

文件放在classpath下面,也就是src下面。

6、需要jtom的以下jar:

 

7、经过测试,配置是成功的。事务可以回滚。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!