Spring多数据源分布式事务管理/springmvc+spring+atomikos[jta]+druid+mybatis

        项目进行读写分离及分库分表,在一个业务中,在一个事务中处理时候将切换多个数据源,需要保证同一事务多个数据源数据的一致性。

        此处使用atomikos来实现(附源码)。另外需要注意以下:

       1:spring3.0之后不再支持jtom[jta]了,支持第三方开源软件atomikos(http://www.atomikos.com/)来实现. 
       2:org.springframework.transaction.jta.JotmFactoryBean类,spring-tx-2.5.6.jar中有此类,spring-tx-3.0.0.RELEASE.jar之后没有此类。
       3:atomikos事务控制框架,其中看到有3种数据源,分别是,SimpleDataSourceBean,AtomikosDataSourceBean,AtomikosNonXADataSourceBean。
            1、SimpleDataSourceBean: 这个是最简单地数据源配置,需要配置XA驱动。
            2、AtomikosDataSourceBean:  分布式数据源,Atomikos实现的数据源,需要配置XA驱动,推荐此配置,可以配置连接池的信息。
            3、AtomikosNonXADataSourceBean: 非分布式数据源,该数据源配置需要普通JDBC的驱动,可以配置连接池:
       4:Atomikos支持XA(全局事务)和NON-XA(非全局事务),NON-XA[nonxadatasource]效率高于XA。XA事务往往是包括多个数据源的全局事务,非XA是单个数据源的.
       5:XA连接是一个JTA事务中的参与者。XA连接不支持JDBC的自动提交特性。也就是说应用程序不必在xadatasource[XA]连接上调用java.sql.Connection.commit()或java.sql.Connection.rollback();而应用程序应该使用UserTransaction.begin(),UserTransaction.commit()和UserTransaction.rollback().

看看pom.xml依赖:

1:AtomikosDataSourceBean[XA(全局事务)]数据源配置datasource-context.xml:

2:spring主配置文件spring-context.xml:

3:数据源配置参数database.properties:

4:mybatis的配置mybatis-context.xml:

配置mybatis-config(此代码,只为测试分布式事务,并不涉及真实的业务!!!):

mybatis-config-master.xml:

mybatis-config-slave.xml

5:Mapper的管理及注入,为mybatis的dao层mapper接口注入[绑定]sqlSessionFactory:

6:atomikos事务配置transaction-context.xml:

7:配置jta启动参数在src下,最后追加详细:

8:代码(部分不涉及代码已删除):

a:mybatis的mapper和dao接口[MemberMapper/MemberInfoMapper]:

b:服务层接口和实现:

c:junit测试代码:

注:通过主键重复可以测试回滚,数据没问题,正常提交不同数据库!log4j和web.xml和sql,其他代码:


效果图:

执行前,master数据库:


执行前,slave数据库:


执行后,master数据库:

执行后,slave数据库:

spring-tx-2.5.6.jar和spring-tx-3.0.0.RELEASE.jar目录:



jta.properties启动参数:

源代码:Spring多数据源分布式事务管理

相关内容推荐