Java的分布式事务(JTA和XA)
Java的分布式事务(JTA和XA)
关于JTA事务和XA事务的介绍
何为分布式事务
一个事务包含多个操作,多个操作操作了多个数据源,这样的事务称为分布式事务。
案例
为什么不能简单的借助数据源的本地事务
用数据源本地事务代码案例
Con1 = db1.getConn..;
Con2 = db2.getConn..;
Try{
con1.insert….
con2.update….
con1.commit;
con2.commit;
}catche(Exception e){
con1.rollback;
con2.rollback;
}
现在会出现一个问题,就是会有第一个事务提交了但是第二个事务失败了,就保证不了一致性了。所以引入了事务管理器
分布式事务管理需要做什么
协调各个数据源的提交、回滚、以及应对通信异常的的管理机制
数据源本身需要支持这种机制(Innodb引擎是支持的)
应对应用的故障恢复机制
事务管理器是协调数据源的,所以需要一套规范的协议
应对网络、主机故障等 事务管理器和数据源需要记录相关日志
就产生了2套规范 :XA 规范和JTA
何为XA 规范
是一套跨语言的标准
XA事务的处理模型
XA的流程
3.XA的2阶段提交 2PC
JTA 是什么
Java Transaction API
java根据XA规范提供的事务处理标准
目的:统一一个API 简化学习
javax.transaction
javax.transaction-api
1.3
定义了一套的接口
开源的实现 TM 提供商
Java Open Transaction Manager (JOTM)
JBoss TS
Bitronix Transaction Manager (BTM)
Atomikos
Narayana
RM的提供商
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">
Java的分布式事务(JTA和XA)相关教程
UEditor 1.2.5 for java 自定义配置
UEditor 1.2.5 for java 自定义配置 1、自定义工具栏 在editor_config.js文件中,找到,toolbars:…并修改,例: ,toolbars:[[source,preview,fullscreen,print,searchreplace, |, undo,redo, |,removeformat,formatmatch,autotypeset,blockquote,pasteplain,|,
[适合初中级Java程序员修炼手册从0搭建整个Web项目](三)
[适合初中级Java程序员修炼手册从0搭建整个Web项目](三) 前言 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/bin392328206 种一棵树最好的时间是十年前,其次是现在 six-finger-web 一个Web后端框架的轮子从处理Http请求【基于Netty的请求级We
安排新版Java15新特性视频教程
安排,新版Java15新特性视频教程 来源:来自网络,如侵权请告知博主删除,感谢????。 仅学习使用,请勿用于其他~ 不得不说,更新的太快了,虽然你发任你发,但是作为程序员,有些东西还是要知道的。虽然现在不用,但是毕竟是后面的版本。所以,看一下也是情
Java安全通信:HTTPS与SSL
Java安全通信:HTTPS与SSL 1. HTTPS概念 1)简介 HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。这个系
阿里大佬总结,Java高并发必读!
阿里大佬总结,Java高并发必读! 作者:wxdoop 原文:https://blog.csdn.net/qq_36235098 来源:前程有光 进程是计算机中程序关于某几何数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。是操作系统结构的基础 线程可以说是轻量级的进程,是程
HTML5 + Javascript 写出一个钢琴
HTML5 + Javascript 写出一个钢琴 首发:GitHubClub原文:juejin.im/post/6879708939190009869 学生时代的我们如果有像郎朗一样的琴技,想必追起女生会非常的容易,但在以前,一架钢琴对普通家庭来说,消费还蛮高的,所以我们不如自己写一架属于自己的钢琴,
数据结构与算法(Java)——稀疏数组
数据结构与算法(Java)——稀疏数组 文章目录 一、五子棋案例 二、稀疏数组 1.基本介绍 2.代码实现 总结 一、五子棋案例 假如我们要开发一款五子棋程序,使用一个二维数组对棋盘数据进行维护是常见的思路。下面以常见的15x15五子棋盘举例,左图是棋盘,右图则
分布式事件调度框架tiger
分布式事件调度框架tiger 一、背景 在后台,有很多业务场景需要定时处理一个任务,或在某件事情发生后处理一个任务。 比如,dw团队后台数据同步时,一般会每天凌晨某个时间点跑一次数据同步任务。这样的业务场景1(定时处理任务),很适合quartz来处理。 有另外