spring + ibatis 多数据源事宜(分布式事务)管理配置方法
spring + ibatis 多数据源事务(分布式事务)管理配置方法spring + ibatis 多数据源事务(分布式事务)管理配
spring + ibatis 多数据源事务(分布式事务)管理配置方法
spring + ibatis 多数据源事务(分布式事务)管理配置方法
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数据源的配置及事务的配置及可。以下是我的配置,供参考。
Xml代码??

- ??????
- <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 ,内容是:
Java代码??

- #JNDI调用协议??
- carol.protocols=jrmp??
- #不使用CAROL?JNDI封装器??????????
- carol.start.jndi=false??
- #不启动命名服务器??
- carol.start.ns=false???
?
文件放在classpath下面,也就是src下面。
6、需要jtom的以下jar:

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