个人理解总结:

jta分布式事务,其实与普通的spring事务配置没多大区别,最主要的是配置不同的mapper使用不同的的数据源,然后再配atomikos和spring的jta事务管理器进行管理(spring管理atomikos),使用还有就是普通的事务API不能满足需求,需要改为对应的transactionmanager,剩下的就是添加一些简单的配置即可。


代码结构:

1.导入相应的jar包

<!--常量和版本号--><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><commons.beanutils>1.9.3</commons.beanutils><spring.version>4.3.10.RELEASE</spring.version><aspectj.version>1.8.6</aspectj.version><aspectj.weaver>1.8.6</aspectj.weaver><mybatis.spring.version>1.3.0</mybatis.spring.version><mybatis.version>3.4.5</mybatis.version><mysql.version>5.1.32</mysql.version><junit.version>4.12</junit.version><commons-fileupload.version>1.3.1</commons-fileupload.version><commons.io.version>2.2</commons.io.version><commons.logging.version>1.2</commons.logging.version><druid.version>1.0.13</druid.version><solr.solrj.version>5.3.1</solr.solrj.version><slf4j.jcl.version>1.7.25</slf4j.jcl.version><slf4j.version>1.7.25</slf4j.version><jstl.version>1.2</jstl.version><servlet-api.version>2.4</servlet-api.version><jsp-api.version>2.0</jsp-api.version><log4j.version>1.2.17</log4j.version><log4j.core.version>2.3</log4j.core.version><commons-lang3.version>3.3.2</commons-lang3.version><dubbo.version>2.5.8</dubbo.version><zkclient.version>0.10</zkclient.version><zookeeper.version>3.4.9</zookeeper.version><javassist.version>3.18.1-GA</javassist.version><persistence.api.version>1.0.2</persistence.api.version><pagehelper.version>3.7.5</pagehelper.version><mapper.version>2.3.4</mapper.version><jsqlparser.version>0.9.1</jsqlparser.version><jackson.version>2.9.2</jackson.version><fastdfs.version>1.0</fastdfs.version><jedis.version>2.9.0</jedis.version><commons.pool2.version>2.5.0</commons.pool2.version><spring.data.redis.version>1.8.5.RELEASE</spring.data.redis.version><httpclient.version>4.3.1</httpclient.version><commons-codec.version>1.9</commons-codec.version><activemq.spring.version>5.15.2</activemq.spring.version><activemq.core.version>5.7.0</activemq.core.version><freemarker.version>2.3.23</freemarker.version><jta.version>1.1</jta.version><atomikos.version>4.0.6</atomikos.version><cglib.nodep.version>3.2.5</cglib.nodep.version></properties><dependencies><dependency><groupId>javax.transaction</groupId><artifactId>jta</artifactId><version>${jta.version}</version></dependency><dependency><groupId>com.atomikos</groupId><artifactId>atomikos-util</artifactId><version>${atomikos.version}</version></dependency><dependency><groupId>com.atomikos</groupId><artifactId>transactions</artifactId><version>${atomikos.version}</version></dependency><dependency><groupId>com.atomikos</groupId><artifactId>transactions-jta</artifactId><version>${atomikos.version}</version></dependency><dependency><groupId>com.atomikos</groupId><artifactId>transactions-jdbc</artifactId><version>${atomikos.version}</version></dependency><dependency><groupId>com.atomikos</groupId><artifactId>transactions-api</artifactId><version>${atomikos.version}</version></dependency><dependency><groupId>cglib</groupId><artifactId>cglib-nodep</artifactId><version>${cglib.nodep.version}</version></dependency><!-- Jackson Json处理工具包 --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>${jackson.version}</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>${jackson.version}</version></dependency><!--数据连接池--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>${druid.version}</version></dependency><!-- spring-core --><dependency><groupId>org.springframework</groupId><artifactId>spring-jms</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency><!-- spring-context --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.version}</version></dependency><!-- spring-context --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><!-- Spring AOP --><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>${spring.version}</version></dependency><!-- AspectJ Runtime --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjrt</artifactId><version>${aspectj.version}</version></dependency><!-- AspectJ Weaver --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>${aspectj.weaver}</version></dependency><!-- Spring Jdbc 的支持 --><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><!-- SpringMVC --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><!-- mybatis-spring 整合 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>${mybatis.spring.version}</version></dependency><!-- mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>${mybatis.version}</version></dependency><!-- Apache工具组件 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>${commons-lang3.version}</version></dependency><!-- MySql --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><!-- JSP相关 --><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>${jstl.version}</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>${servlet-api.version}</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jsp-api</artifactId><version>${jsp-api.version}</version><scope>provided</scope></dependency><!-- Test dependencies --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version><scope>test</scope></dependency></dependencies><build><defaultGoal>install</defaultGoal><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.6.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>3.0.2</version><configuration><encoding>UTF-8</encoding></configuration></plugin></plugins><!--IDEA编译src的java文件,而目录下的xml文件并不会一起打包,需要手动指定哪些配置文件需要读取--><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource></resources></build>

2.配置文件

<!--包扫描--><context:component-scan base-package="cn.test.service.impl"/><!--使用CGLIB动态代理--><tx:annotation-driven transaction-manager="txManager" proxy-target-class="true"/><!-- 解析jdbc配置文件 --><context:property-placeholder location="classpath:resource/jdbc.properties"/><!-- the transactional advice (what 'happens'; see the <aop:advisor/> beanbelow) 事务传播特性配置 --><tx:advice id="txAdvice" transaction-manager="txManager"><!-- the transactional semantics... --><tx:attributes><tx:method name="add*" propagation="REQUIRED" isolation="DEFAULT"rollback-for="java.lang.Exception"/><tx:method name="save*" propagation="REQUIRED" isolation="DEFAULT"rollback-for="java.lang.Exception"/><tx:method name="insert*" propagation="REQUIRED" isolation="DEFAULT"rollback-for="java.lang.Exception"/><tx:method name="update*" propagation="REQUIRED" isolation="DEFAULT"rollback-for="java.lang.Exception"/><tx:method name="modify*" propagation="REQUIRED" isolation="DEFAULT"rollback-for="java.lang.Exception"/><tx:method name="delete*" propagation="REQUIRED" isolation="DEFAULT"rollback-for="java.lang.Exception"/><!-- 查询方法 --><tx:method name="query*" read-only="true"/><tx:method name="select*" read-only="true"/><tx:method name="find*" read-only="true"/></tx:attributes></tx:advice><!-- 声明式事务AOP配置 --><aop:config><aop:pointcut expression="execution(* cn.test.service.impl.*.*(..))" id="tranpointcut"/><aop:advisor advice-ref="txAdvice" pointcut-ref="tranpointcut"/></aop:config><!-- 配置atomikos事务管理器 --><bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init"destroy-method="close"><property name="forceShutdown" value="false"/></bean><bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp"><property name="transactionTimeout" value="300000"/></bean><!--JTA事务管理器 spring的事务管理器--><bean id="txManager" class="org.springframework.transaction.jta.JtaTransactionManager"><property name="transactionManager"><ref bean="atomikosTransactionManager"/></property><property name="userTransaction"><ref bean="atomikosUserTransaction"/></property><property name="allowCustomIsolationLevels" value="true"/></bean><!--数据源基础配置--><bean id="abstractXADataSource" class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init"destroy-method="close" abstract="true"><property name="xaDataSourceClassName" value="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource"/><property name="poolSize" value="10"/><property name="minPoolSize" value="10"/><property name="maxPoolSize" value="30"/><property name="borrowConnectionTimeout" value="60"/><property name="reapTimeout" value="20"/><property name="maxIdleTime" value="60"/><property name="maintenanceInterval" value="60"/><property name="testQuery"><value>SELECT 1</value></property></bean><!-- 数据库基本信息配置 --><bean id="dataSourceOne" parent="abstractXADataSource"><property name="uniqueResourceName"><value>dataSourceOne</value></property><property name="xaDataSourceClassName" value="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource"/><property name="xaProperties"><props><prop key="URL">${jdbc.url}</prop><prop key="user">${jdbc.username}</prop><prop key="password">${jdbc.pwd}</prop></props></property></bean><!--日志数据源--><bean id="dataSourceLog" parent="abstractXADataSource"><property name="uniqueResourceName"><value>dataSourceLog</value></property><property name="xaDataSourceClassName" value="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource"/><property name="xaProperties"><props><prop key="URL">${jdbc.log.url}</prop><prop key="user">${jdbc.log.username}</prop><prop key="password">${jdbc.log.pwd}</prop></props></property></bean><!--sqlSessionFactoryBeanOne的配置--><bean id="sqlSessionFactoryBeanOne" class="org.mybatis.spring.SqlSessionFactoryBean"><!--MyBatis别名MyBatis配置文件MyBatis配置映射文件指定数据源--><property name="typeAliasesPackage" value="cn.test.model"/><property name="configLocation" value="classpath:mybatis/mybatis.xml"/><property name="mapperLocations"><array><value>classpath:cn/test/mapper/*Mapper.xml</value></array></property><property name="dataSource" ref="dataSourceOne"/></bean><!--包扫描--><bean id="mapperScannerConfigurerOne" class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!--指定对应接口的包路径--><property name="basePackage" value="cn.test.mapper"/><property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBeanOne"/></bean><!--sqlSessionFactoryBeanLog的配置--><bean id="sqlSessionFactoryBeanLog" class="org.mybatis.spring.SqlSessionFactoryBean"><!--MyBatis别名MyBatis配置文件MyBatis配置映射文件指定数据源--><property name="typeAliasesPackage" value="cn.test.model"/><property name="configLocation" value="classpath:mybatis/mybatis.xml"/><property name="mapperLocations"><array><value>classpath:cn/test/logmapper/*Mapper.xml</value></array></property><property name="dataSource" ref="dataSourceLog"/></bean><!--包扫描--><bean id="mapperScannerConfigurerLog" class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!--指定对应接口的包路径--><property name="basePackage" value="cn.test.logmapper"/><property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBeanLog"/></bean><bean class="com.fasterxml.jackson.databind.ObjectMapper" id="objectMapper"/>

3.代码测试

jta分布式事务简单使用相关推荐

  1. Spring MyBatis Atomikos 实现JTA分布式事务

    Spring+MyBatis+Atomikos实现JTA分布式事务 项目中需要同时操作两个数据库,对两个数据库中的表同时做变更时就需要控制事务,要么全部成功,要么全部失败. Atomikos是一个开源 ...

  2. SpringBoot之JPA框架下如何使用JTA——分布式事务解决方案

    以前,笔者写过一篇博客,支付宝DTS方案,当然,只是仅仅是简单讨论了下分布式事务的解决方案.PS:笔者看了下相关评论,发现由于太简单,被不少人Diss了一通. 最近,笔者在自己的工程上,试图一次性解决 ...

  3. Java JDBC事务与JTA分布式事务

    Java事务的类型有三种:JDBC事务.JTA(Java Transaction API)事务.容器事务. 常见的容器事务如Spring事务,容器事务主要是J2EE应用服务器提供的,容器事务大多是基于 ...

  4. Spring JTA分布式事务实现

    1.概述 Java Transaction API,通常称为JTA,是用于管理 Java中的事务的API .它允许我们以资源无关的方式启动,提交和回滚事务. 根据用于管理事务的底层实现,Spring中 ...

  5. 使用Atomikos Transactions Essentials实现多数据源JTA分布式事务--转载

    原文:http://www.ite/topic/122700 9.17 update:使用NonXADataSourceBean. Mysql在5.0版本和Connecter/J5.0版本后提供了XA ...

  6. 破解世界性技术难题! GTS让分布式事务简单高效

    近日,2017云栖大会·深圳峰会如期举行,多项阿里云新产品对外发布.在企业级互联网架构分会场,来自阿里中间件(Aliware)的技术专家及合作伙伴,为现场参会嘉宾带来最新的传统IT架构到企业级互联网架 ...

  7. JTA+Atomikos解决分布式事务问题

    JTA分布式事务:Java Transaction API,允许应用程序执行分布式事务处理. Atomikos:为java平台提供增值服务并且开源的事务管理器. 基于xa协议,xa协议是以两阶段提交协 ...

  8. 分布式事务2PC、3PC模型

    工作中使用最多的是本地事务,但是在对单一项目拆分为 SOA.微服务之后,就会牵扯出分布式事务场景 文章以分布式事务为主线展开说明,并且针对 2PC.3PC 算法进行详细的讲解,最后通过一个 Demo ...

  9. MySQL中基于XA实现的分布式事务

    文章目录 一.前言 二.XA基础 2.1 XA基础知识 2.1.1 DTP是什么? 2.1.2 DTP的结构:AP TM RM(重点001) 2.1.3 DTP的重要概念 2.2 XA事务:基于两阶段 ...

最新文章

  1. 开源轻量级办公系统Sandbox介绍以及配套开发文档连载
  2. uniapp中使用picker_uniapp 使用个推推送系统消息
  3. php使用imagemagick,PHP的ImageMagick使用;
  4. NIPS 2017论文解读 | 基于对比学习的Image Captioning
  5. oxp开放型可变长协议_培养开放型领导者
  6. Linu移植随笔:由ts_config:Success想到的
  7. 有关线程安全的概念范畴
  8. AutoVBA调用AddCricle方法绘制圆
  9. 04_用户注册与自定义数据转换器Conventer
  10. 计算机主机内部防尘装置,一种计算机主机用防尘装置制造方法及图纸
  11. python篇 006-- pycharm vsc 编写python(对比浅析混合使用) pycharm篇
  12. 10个提供Logo设计灵感的创意网站
  13. 初中计算机初识word教学设计,《初识Word》教学设计
  14. 大厂技术实现 | 爱奇艺文娱知识图谱的构建与应用实践 @自然语言处理系列
  15. 上半年要写的博客文章30
  16. 将彩色图片分离为RGB三个通道的灰度图,并输出
  17. android 反向进度条,Android ProgressBar 反向进度条/进度条从右到左走
  18. 织梦DEDECMS 整合Kindeditor编辑器美化版nkeditor版可H5多图上传摒弃SWF上传
  19. JS兼容所有浏览器获取浏览器高度和宽度
  20. 多线程|pi1.c 使用2个线程根据莱布尼兹级数计算PI

热门文章

  1. pytorch inference_detector函数使用
  2. Joplin笔记 android,把笔记还给用户「Joplin」可以选择自己存储位置的笔记应用
  3. 谁看谁懂的3dmax、ZBrush和Maya区别
  4. 管理者如何面对不确定性,环境变化的这几个重要特征你知道么
  5. AB局域网文件存储服务器软件,校园局域网组建和配置.doc
  6. 李明杰的视频和李明杰的博客是学习OC的基础
  7. Mac安装配置iterm2
  8. 极大连通子图与极小连通子图(带图讲解)
  9. 关系型数据库和非关系型数据库的区别以及应用的场景
  10. c# WinForm 开发心得