日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

jta mysql_JTA 使用 MySQL 分布式事务

發布時間:2024/8/23 数据库 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jta mysql_JTA 使用 MySQL 分布式事务 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

假定在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 分布式事务的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。