码迷,mamicode.com
首页 > 编程语言 > 详细

Spring 分布式事物详解

时间:2019-04-04 12:34:31      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:通知   环境   允许   消息   manage   block   image   jndi   应用程序   

在学习分布式事物的过程中会遇到以下关键名词:

 

相关名词:

XA :XA规范的目的是允许多个资源(如数据库,应用服务器,消息队列,等等)在同一事务中访问,这样可以使ACID属性跨越应用程序而保持有效。XA使用两阶段提交来保证所有资源同时提交或回滚任何特定的事务。

JTA: Java事务API(Java Transaction API,简称JTA ) 是一个Java企业版 的应用程序接口,在Java环境中,允许完成跨越多个XA资源的分布式事务。

 

分布式事物要解决的问题:

把不同支援放到一个事物中,实现ACID。举例说明,一个方法中需要操作两个数据库 db1,db2, 本地事物是基于connection ,所以无法保证两个库的事物,这是后需要用到分布式事物。

 

分布式事物原理:

两阶段提交。简单来说,引入事物管理器(txManager)的概念,开启事物前,txManager 创建一个 tx ,txId 是全局事物的唯一标示, 方法中db1操作完成后,告知tx  db1操作成功,但db1没有真的提交,而是block住了。db2 继续执行,执行完了自己block住,然后告知txManager,这个事物可以提交了,然后txManager 通知db1 db2 你们可以真正提交了,事物结束。

db block 住属于第一阶段, 真正提交或者回滚属于第二阶段,这就是两阶段提交。

 

分布式事物实现方案:

1.基于 XA和JTA 规范的,需要用到JNDI ,比较笨重。JTA 的实现方式是依赖支持jndi 的容器,资源(datasource)和管理器(txManager)都必须配置成jndi ,然后两阶段过程是在容器层面执行的,影藏了具体细节。

2.非规范实现。

spring 官方推荐的分布式事物实现方案有:  Atomikos  Bitronix

Atomikos 支持了XA规范和非XA:

技术图片

 

 mysql-connector.jar 驱动程序对JTA的支持:

技术图片

 

Spring 分布式事物详解

标签:通知   环境   允许   消息   manage   block   image   jndi   应用程序   

原文地址:https://www.cnblogs.com/kevin7234/p/10654032.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!