假定在MySQL实例1上有表

create table person(

id int,

name varchar(32)

)

MySQL实例2上也有一张同样的表,现在从实例1中的 person 表中删除一条数据,并把这条数据插入到实例2的表中,这两个操作在同一个事务中,因为跨越了数据库实例,涉及到了分布式事务。

MySQL实现了分布式事务,查看数据库是否启用了 XA 事务:

show variables like 'innodb_support_xa';

MySQL 关于xa的命令:

xa start 'a';

sql 语句;

xa end 'a';

xa prepare 'a';

xa commit 'a';

与正常事务相比,XA 命令多了 prepare,询问是否准备好,事务管理器根据 prepare 返回的结果进行操作。

以上命令是分布式事务的操作方法,在一个命令行中输入上述命令,并不是真实的分布式事务。可以使用 JTA 来控制MySQL的 XA:

public class JTA_MySQL {

public static void main(String[] args) {

XADataSource xaDs1 = JTA_MySQL.getDataSource(

"jdbc:mysql://172.30.60.126:3306/db_zhang", "root",

"root");

XAConnection xaCon1 = null;

XAResource xaRes1 = null;

Connection conn1 = null;

Statement stmt1 = null;

XADataSource xaDs2 = JTA_MySQL.getDataSource(

"jdbc:mysql://172.30.60.124:3306/db_zhang", "root",

"root");

XAConnection xaCon2 = null;

XAResource xaRes2 = null;

Connection conn2 = null;

Statement stmt2 = null;

int ret1 = 0;

int ret2 = 0;

Xid xid1 = new MyXid(100, new byte[] { 0x01 }, new byte[] { 0x02 });

Xid xid2 = new MyXid(100, new byte[] { 0x01 }, new byte[] { 0x03 });

try {

xaCon1 = getXAConnetion(xaDs1);

conn1 = getConnection(xaCon1);

stmt1 = conn1.createStatement();

xaRes1 = xaCon1.getXAResource();

xaCon2 = getXAConnetion(xaDs2);

conn2 = getConnection(xaCon2);

stmt2 = conn2.createStatement();

xaRes2 = xaCon2.getXAResource();

xaRes1.start(xid1, XAResource.TMNOFLAGS);

stmt1.execute("delete from person where id=1");

xaRes1.end(xid1, XAResource.TMSUCCESS);

xaRes2.start(xid2, XAResource.TMNOFLAGS);

stmt2.execute("insert into person select 1, 'zhang'");

xaRes2.end(xid2, XAResource.TMSUCCESS);

ret1 = xaRes1.prepare(xid1);

ret2 = xaRes2.prepare(xid2);

if (XAResource.XA_OK == ret1 && XAResource.XA_OK == ret2) {

xaRes1.commit(xid1, false);

xaRes2.commit(xid2, false);

System.out.println("提交分布式事务");

} else {

xaRes1.rollback(xid1);

xaRes2.rollback(xid2);

System.out.println("回退分布式事务");

}

} catch (SQLException e) {

e.printStackTrace();

} catch (XAException e) {

e.printStackTrace();

}

}

private static XADataSource getDataSource(String url, String user,

String password) {

MysqlXADataSource dataSource = new MysqlXADataSource();

dataSource.setUrl(url);

dataSource.setUser(user);

dataSource.setPassword(password);

return dataSource;

}

public static XAConnection getXAConnetion(XADataSource dataSource) {

XAConnection XAConn = null;

try {

XAConn = dataSource.getXAConnection();

} catch (SQLException e) {

e.printStackTrace();

}

return XAConn;

}

public static Connection getConnection(XAConnection XAConn) {

Connection conn = null;

try {

conn = XAConn.getConnection();

} catch (SQLException e) {

e.printStackTrace();

}

return conn;

}

public static void closeConnection(Connection conn) {

try {

conn.close();

} catch (SQLException e) {

System.out.println("连接关闭失败");

}

}

}

MyXid 类:

public class MyXid implements Xid {

private int formatId;

private byte[] globalTid;

private byte[] branchQ;

public MyXid(int formatId, byte[] globalTid, byte[] branchQ) {

this.formatId = formatId;

this.globalTid = globalTid;

this.branchQ = branchQ;

}

public byte[] getBranchQualifier() {

return this.branchQ;

}

public int getFormatId() {

return formatId;

}

public byte[] getGlobalTransactionId() {

return this.globalTid;

}

}

Mysql分布式事务

关于Mysql分布式事务介绍,可参考:http://blog.csdn.net/luckyjiuyi/article/details/46955337 分为两个阶段:准备和执行阶段.有两个角色:事务的 ...

mysql 分布式事务

php + mysql 分布式事务 事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元: 事务应该具有4个属性:原子性.一致性.隔离性.持续性 原子性(atomicit ...

详解Mysql分布式事务XA(跨数据库事务)

详解Mysql分布式事务XA(跨数据库事务) 学习了:http://blog.csdn.net/soonfly/article/details/70677138 mysql执行XA事物的时候,mysq ...

Spring+JTA+Atomikos+mybatis分布式事务管理

我们平时的工作中用到的Spring事务管理是管理一个数据源的.但是如果对多个数据源进行事务管理该怎么办呢?我们可以用JTA和Atomikos结合Spring来实现一个分布式事务管理的功能.了解JTA可 ...

php + mysql 分布式事务(转)

事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元: 事务应该具有4个属性:原子性.一致性.隔离性.持续性 原子性(atomicity).一个事务是一个不可分割的工作单 ...

php + mysql 分布式事务

事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元: 事务应该具有4个属性:原子性.一致性.隔离性.持续性 原子性(atomicity).一个事务是一个不可分割的工作单 ...

了解一下Mysql分布式事务及优缺点、使用案例(php+mysql)

在开发中,为了降低单点压力,通常会根据业务情况进行分表分库,将表分布在不同的库中(库可能分布在不同的机器上),但是一个业务场景可能会同时处理两个表的操作.在这种场景下,事务的提交会变得相对复杂,因为多 ...

分布式事务(三)mysql对XA协议的支持

系列目录 分布式事务(一)原理概览 分布式事务(二)JTA规范 分布式事务(三)mysql对XA协议的支持 分布式事务(四)简单样例 分布式事务(五)源码详解 分布式事务(六)总结提高 引子 从Mys ...

【分布式事务】使用atomikos+jta解决分布式事务问题

一.前言 分布式事务,这个问题困惑了小编很久,在3个月之前,就间断性的研究分布式事务.从MQ方面,数据库事务方面,jta方面.近期终于成功了,使用JTA解决了分布式事务问题.先写一下心得,后面的二级提 ...

随机推荐

Javascript的自执行函数

自执行函数其实也就是"立即执行的函数",它有四个特点:提高性能.利于压缩.避免冲突.依赖加载: 1.减少作用域查找 JS代码: // Anonymous function that ...

转载~kxcfzyk:Linux C语言多线程库Pthread中条件变量的的正确用法逐步详解

Linux C语言多线程库Pthread中条件变量的的正确用法逐步详解   多线程c语言linuxsemaphore条件变量 (本文的读者定位是了解Pthread常用多线程API和Pthread互斥锁 ...

RPM 包下载 GCC 4.8安装

http://ftp.scientificlinux.org/linux/scientific/ http://www.rpmfind.net/linux/rpm2html/search.php?qu ...

【MVC】ASP.NET MVC中实现多个按钮提交的几种方法

有时候会遇到这种情况:在一个表单上需要多个按钮来完成不同的功能,比如一个简单的审批功能. 如果是用webform那不需要讨论,但asp.net mvc中一个表单只能提交到一个Action处理,相对比较 ...

S3C2440 TFTLCD驱动详解

S3C2440自带有LCD控制器,该控制器主要有以下接口 仅仅说TFT显示器,TFT显示器的时序如下 TFT显示器的驱动是以行列的形式逐点扫描过来的,驱动时钟有三种,一种是行时钟,一种是列时钟,还有一 ...

C# IE浏览器

引用Microsoft HTML Object Library 引用 -> com -> Microsoft HTML Object Library 引用后,显示如图 1.判断ie浏览器是 ...

win8.1 AMD 屏幕亮度无法调整

lenovo z465  AMD处理器. win8.1 pro系统   屏幕亮度无法调整解决办法:   1:当然是先去本地服务里禁用"Sensor Monitoring Service&qu ...

Java笔记(三)异常

异常 一.概念 一)为什么会有Java异常机制 在没有Java异常机制的情况下,唯一的退出机制就是返回值,判断是否异常的方法就是 返回值.方法根据是否异常返回不同的返回值,调用者根据不同的返回值进行判 ...

SQLite在Android程序中的使用方法,SQLite的增删查改方法

Sqlite: 1.一款用来实现本地数据存储的轻量级数据管理工具,是众多用来实现数据库管理的工具之一. 2.Android已经将SQLite的代码功能吸收在它的系统中,我们可以直接在Android程序 ...

jta mysql_JTA 使用 MySQL 分布式事务相关推荐

  1. spring boot+Mybatis+mysql+atomikos+jta实现多数据源分布式事务

    spring boot+Mybatis+mysql+atomikos+jta实现多数据源分布式事务 1.导入相关依赖 2.配置相关application.properties 3.创建配置文件 4.创 ...

  2. MySQL分布式事务(XA事务)

    MySQL分布式事务(XA事务) 官网:https://dev.mysql.com/doc/refman/5.7/en/xa.html 1.什么是分布式事务 分布式事务就是指事务的参与者.支持事务的服 ...

  3. Mysql分布式事务

    Mysql分布式事务 XA协议 分布式事务模型 流程 两阶段提交 Mysql中的XA语法 使用演示 XA状态转换图 XA的BUG XA的性能问题 总结 参考资源 XA协议 为了规范分布式事务的管理,X ...

  4. springBoot入门总结(八)使用 jta+atomikos 整合springBoot分布式事务

    一.JTA:Java Transaction Manager 事务是计算机应用中不可或缺的组件模型,它保证了用户操作的原子性 ( Atomicity ).一致性 ( Consistency ).隔离性 ...

  5. java mysql 分布式事务_java事务(三)——自己实现分布式事务

    在上一篇<java事务(二)--本地事务>中已经提到了事务的类型,并对本地事务做了说明.而分布式事务是跨越多个数据源来对数据来进行访问和更新,在JAVA中是使用JTA(Java Trans ...

  6. 深入理解PHP+Mysql分布式事务与解决方案

    事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元: 事务的ACID特性 事务应该具有4个属性:原子性.一致性.隔离性.持续性 原子性(atomicity).一个事务是 ...

  7. 详解Mysql分布式事务XA

    在开发中,为了降低单点压力,通常会根据业务情况进行分表分库,将表分布在不同的库中(库可能分布在不同的机器上).在这种场景下,事务的提交会变得相对复杂,因为多个节点(库)的存在,可能存在部分节点提交失败 ...

  8. Java jta 原理_Java的分布式事务(JTA和XA)

    Java的分布式事务(JTA和XA) Java的分布式事务(JTA和XA) 关于JTA事务和XA事务的介绍 何为分布式事务 一个事务包含多个操作,多个操作操作了多个数据源,这样的事务称为分布式事务. ...

  9. mysql分布式事务wcf_WCF系列_分布式事务(下)

    1.WCF分布式事务例子 这里也用转账的例子说事. 用户在系统A和系统B都有账户,账户间的资金可以互转,系统A的资金减少多少,系统B的相应账户的资金就增加多少. 系统A机器上有数据库AccountA, ...

最新文章

  1. 8、collection
  2. Java学习笔记——显示当前日期的三种方式
  3. 【蓝桥杯】算法提高 7-2求arccos值
  4. Andorid之KeyguardManager的介绍
  5. html转pdf后 框会消失,html或其它文件转pdf弹出打开保存框
  6. git使用—rebase还是merge
  7. 2021高考技能考试成绩查询,2021年临床技能考试成绩出来了!附查询方式
  8. vnpy学习10_常见坑
  9. 利用反射打印对象一般成员属性值
  10. 软件安装下载的镜像站、国内源
  11. Python 三目运算符(三分支)
  12. Java第十二次作业:继承与抽象类解决工人与学生的问题,抽象类实例。抽象类作用——为多态创造了可能。抽象类的作用总结...
  13. 浅谈SQL注入攻击与防御(适用于小白观看)
  14. 《Word排版艺术》读后感,兼谈LaTeX
  15. [RQNOJ]PID34 / 紧急援救
  16. 我的世界JAVA网易版mod_我的世界中国版严重问题 网易禁止加入mod遭forge谴责
  17. 软件测试工程师岗位职责、岗位要求
  18. java.lang.IllegalArgumentException: Not an managed type
  19. 服务端解决故障的处理思路
  20. 第四部分:NoSQL实践

热门文章

  1. 上古卷轴5json文件修改_【白夜谈】我做了一款失败的《社长卷轴》Mod
  2. 规避软件架构风险之反模式
  3. RabbitMQ和Kafka选型用哪个
  4. AI应用开发基础傻瓜书系列目录
  5. python 小说 云_小说python操作PLC
  6. java .item,javabb-javaitem-cloud
  7. 牙齿间隙变大怎么办_牙齿之间的间隙越来越大怎么办?
  8. db2 sql 判断select是否为空_学会复杂一点的SQL语句:Oracle DDL和DML
  9. Java 并发编程必须知道的七种锁类型以及应用
  10. vue 渲染函数处理slot_vue render 渲染函数