Java jta 原理_Java的分布式事务(JTA和XA)-Go语言中文社区

关于JTA事务和XA事务的介绍

何为分布式事务

一个事务包含多个操作,多个操作操作了多个数据源,这样的事务称为分布式事务。

案例

a18555e5904f3e201349d2f97aa3ee80.png

为什么不能简单的借助数据源的本地事务

用数据源本地事务代码案例

Con1 = db1.getConn..;

Con2 = db2.getConn..;

Try{

con1.insert….

con2.update….

con1.commit;

con2.commit;

}catche(Exception e){

con1.rollback;

con2.rollback;

}

现在会出现一个问题,就是会有第一个事务提交了但是第二个事务失败了,就保证不了一致性了。所以引入了事务管理器

分布式事务管理需要做什么

协调各个数据源的提交、回滚、以及应对通信异常的的管理机制

数据源本身需要支持这种机制(Innodb引擎是支持的)

应对应用的故障恢复机制

aae51bd4d687dcc5e7eb9bd2d10dc9d9.png

事务管理器是协调数据源的,所以需要一套规范的协议

应对网络、主机故障等 事务管理器和数据源需要记录相关日志

就产生了2套规范 :XA 规范和JTA

何为XA 规范

d1ec66fd35eca3202b21607921f70342.png

是一套跨语言的标准

XA事务的处理模型

7aee6f209557e55843a4fecd7db20e3d.png

XA的流程

f1805f6838514594ed6250b69c525011.png

3.XA的2阶段提交 2PC

24f259970abba687e37c17aef1885a4f.png

JTA 是什么

Java Transaction API

java根据XA规范提供的事务处理标准

目的:统一一个API 简化学习

javax.transaction

javax.transaction-api

1.3

定义了一套的接口

b61c258d7ae41b7f398782acd18d124d.png

a3ca07e51d15bd3dc5b1fec6f6ced6c8.png

开源的实现 TM 提供商

Java Open Transaction Manager (JOTM)

JBoss TS

Bitronix Transaction Manager (BTM)

Atomikos

Narayana

RM的提供商

6a690c213a8edaa5b5cdecd67cc18186.png

Spring集成JTA(Atomikos案例)

maven依赖

单纯使用Spring

javax.transaction

javax.transaction-api

1.3

com.atomikos

transactions-jdbc

4.0.6

com.atomikos

transactions-jms

4.0.6

Spring boot

org.springframework.boot

spring-boot-starter-jta-atomikos

2.1.1.RELEASE

bean的配置

init-method="init" destroy-method="close">

value="com.alibaba.druid.pool.xa.DruidXADataSource" />

${db1.jdbc.url}

${jdbc.username}

${jdbc.password}

1

1

10

init-method="init" destroy-method="close">

value="com.alibaba.druid.pool.xa.DruidXADataSource" />

${db2.jdbc.url}

${jdbc.username}

${jdbc.password}

1

1

10

class="com.atomikos.icatch.config.UserTransactionServiceImp"

init-method="init" destroy-method="shutdownForce">

com.atomikos.icatch.standalone.UserTransactionServiceFactory

jtalog

f:/test

class="com.atomikos.icatch.jta.UserTransactionManager"

init-method="init" destroy-method="close"

depends-on="userTransactionService">

class="com.atomikos.icatch.jta.UserTransactionImp"

depends-on="userTransactionService">

class="org.springframework.transaction.jta.JtaTransactionManager"

depends-on="userTransactionService">

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值