springcloud分布式事务Atomikos实例
0.JTA(Java Transaction Manager)的介绍
(1)jta与jdbc
简单的说 jta是多库的事务 jdbc是单库的事务
(2)XA与JTA
XA : XA是一个规范或是一个事务的协议.XA协议由Tuxedo首先提出的,并交给X/Open组织,作为资源管理器(数据库)与事务管理器的接口标准.
XA规范定义了:
1. TransactionManager : 这个TransactionManager可以通过管理多个ResourceManager来管理多个Resouce,也就是管理多个数据源
2. XAResource : 针对数据资源封装的一个接口
3. 两段式提交 : 多数据源事务提交的机制
JTA(Java Transaction Manager) : 是Java规范,是XA在Java上的实现.
1. TransactionManager : 常用方法,可以开启,回滚,获取事务. begin(),rollback()...
2. XAResouce : 资源管理,通过Session来进行事务管理,commit(xid)...
3. XID : 每一个事务都分配一个特定的XID
JTA是如何实现多数据源的事务管理呢?
主要的原理是两阶段提交,以上面的请求业务为例,当整个业务完成了之后只是第一阶段提交,在第二阶段提交之前会检查其他所有事务是否已经提交,如果前面出现了错误或是没有提交,那么第二阶段就不会提交,而是直接rollback操作,这样所有的事务都会做Rollback操作.
(3)jta特点
JTA的有点就是能够支持多数据库事务同时事务管理,满足分布式系统中的数据的一致性.但是也有对应的弊端:
- 两阶段提交
- 事务时间太长,锁数据太长
- 低性能,低吞吐量
1.maven的pom中增加spring-boot-starter-jta-atomikos
2.配置jta和atomikos的多数据源,例如:
jta:
enabled: true
atomikos:
datasource:
order:
xa-properties.url: jdbc:h2:mem:dborder
xa-properties.user: sa
xa-properties.password:
xa-data-source-class-name: org.h2.jdbcx.JdbcDataSource
unique-resource-name: order
max-pool-size: 10
min-pool-size: 1
max-lifetime: 10000
borrow-connection-timeout: 10000
log:
xa-properties.url: jdbc:h2:mem:dblog
xa-properties.user: sa
xa-properties.password:
xa-data-source-class-name: org.h2.jdbcx.JdbcDataSource
unique-resource-name: log
max-pool-size: 10
min-pool-size: 1
max-lifetime: 10000
borrow-connection-timeout: 10000
3.atomikos的jta与jpa的配置和数据源配置
import org.hibernate.engine.transaction.jta.platform.internal.AbstractJtaPlatform; import javax.transaction.TransactionManager;
import javax.transaction.UserTransaction; /**
* Created by caibosi on 2018-07-25.
*/
public class AtomikosJtaPlatform extends AbstractJtaPlatform { private static TransactionManager transactionManager; private static UserTransaction userTransaction; public static void setTransactionManager(TransactionManager transactionManager) {
AtomikosJtaPlatform.transactionManager = transactionManager;
} public static void setUserTransaction(UserTransaction userTransaction) {
AtomikosJtaPlatform.userTransaction = userTransaction;
} @Override
protected TransactionManager locateTransactionManager() {
return transactionManager;
} @Override
protected UserTransaction locateUserTransaction() {
return userTransaction;
}
}
4.使用jta 在方法上面使用@Transactional
@Transactional
public void newOrderRollback(String userId,String productCode,int quantity){
UserOrder userOrder = new UserOrder();
userOrder.setUserId(userId);
userOrder.setProductCode(productCode);
userOrder.setQuantity(quantity);
userOrderDao.save(userOrder); EventLog eventLog = new EventLog();
eventLog.setOperation("new order");
eventLog.setOperator(userId);
eventLogDao.save(eventLog); throw new RuntimeException("test jta rollback");
}
5.在调用newOrderRollback时会回滚
参考:https://github.com/SpringCloud/spring-cloud-code.git ch24
https://www.jianshu.com/p/3938e7172443
springcloud分布式事务Atomikos实例的更多相关文章
- SpringCloud 分布式事务解决方案
目录 TX-LCN分布式事务框架 TX-LCN分布式事务框架 随着互联化的蔓延,各种项目都逐渐向分布式服务做转换.如今微服务已经普遍存在,本地事务已经无法满足分布式的要求,由此分布式事务问题诞生. 分 ...
- SQLSERVER分布式事务使用实例
实例一 尊重原著作:本文参考自http://www.jb51.net/article/43540.htm --BEGIN DISTRIBUTED TRANSACTION [transactionnam ...
- springCloud分布式事务实战(一)案例需求及实现步骤
本文不对分布式事务原理进行探索,而是通过一个案例来说明如何使用分布式事务 案例需求:创建2个基于springCloud的微服务,分别访问不同的数据库:然后创建一个整合服务,调用微服务实现数据的保存到2 ...
- 分布式事务(3)---强一致性分布式事务Atomikos实战
分布式事务(1)-理论基础 分布式事务(2)---强一致性分布式事务解决方案 分布式事务(4)---最终一致性方案之TCC 前面介绍强一致性分布式解决方案,这里用Atomikos框架写一个实战的dem ...
- springcloud分布式事务终极探讨
2018阿里云全部产品优惠券(好东东,强烈推荐)领取地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userC ...
- springcloud分布式事务TXLCN
新增一个model,pom文件引入依赖 <dependency> <groupId>org.springframework.boot</groupId> ...
- 测试web数据库的分布式事务atomikos 的三种数据源 SimpleDataSourceBean,AtomikosDataSourceBean,AtomikosNonXADataSourceBean
这2天学习了atomikos事务控制框架,其中看到有3种数据源,分别是,SimpleDataSourceBean,AtomikosDataSourceBean,AtomikosNonXADataSou ...
- SpringCloud分布式事务TCC实现
可以参考 http://www.txlcn.org/ 的实现方式
- 分布式事务(4)---最终一致性方案之TCC
分布式事务(1)-理论基础 分布式事务(2)---强一致性分布式事务解决方案 分布式事务(3)---强一致性分布式事务Atomikos实战 强一致性分布式事务解决方案要求参与事务的各个节点的数据时刻保 ...
随机推荐
- Meterpreter初探
Meterpreter Meterpreter号称"黑客瑞士军刀",Meterpreter是Metasploit框架中的一个杀手锏,通常作为漏洞溢出后的攻击载荷使用,攻击载荷在触发 ...
- js实现textarea自适应高度
html结构: <div class="container" id="container"> <div class="text-wr ...
- 用Toad for Oracle创建数据库表空间和用户
打开Toad, 1,菜单栏Session—>new Connection….打开如下窗口: 2,进入之后,菜单DatebaseàSechema Brower...找到Table Space(表 ...
- Linux—编译安装详解
编译安装python3 1.python是通过C语言编写,所以在编译安装python3时需要在C语言环境 [root@localhost ~]# yum install -y gcc 2.python ...
- 【转】gdb的调试与使用
转载自:https://www.jianshu.com/p/7a06b0bda2d8 gdb的调试与使用 这篇应该是我见过的总结最详细的gdb调试指南了,这位博主是个很强的人,他的博客对萌新比较友好, ...
- c# 第41节 异常处理
本节内容: 1:捕获异常两种方式 2:处理异常的两种方式 3:实例处理异常 4:手动触发异常 5:预定义异常类有哪些 6:自定义异常 1:捕获异常 第一种 捕获:只能知道发生了异常 第二种捕获: 可以 ...
- 面向对象程序设计(Java) 第7周学习指导及要求
2019面向对象程序设计(Java)第7周学习指导及要求 (2019.10.11-2019.10.14) 学习目标 掌握四种访问权限修饰符的使用特点: 掌握Object类的用途及常用API: 掌握Ar ...
- CF1225B2 TV Subscriptions (Hard Version)
CF1225B2 TV Subscriptions (Hard Version) 洛谷评测传送门 题目描述 The only difference between easy and hard vers ...
- Python进阶-XVV hashlib模块、configparse模块、logging模块
1.配置相关的configparse模块 配置文件如何组织?python中常见的是将配置文件写成py,然后引入该模块即可.优点是方便访问. 但是也有用类似windows中的ini文件的配置文件,了解即 ...
- 洛谷P1283 平板涂色 &&一本通1445:平板涂色
题目描述 CE数码公司开发了一种名为自动涂色机(APM)的产品.它能用预定的颜色给一块由不同尺寸且互不覆盖的矩形构成的平板涂色. 为了涂色,APM需要使用一组刷子.每个刷子涂一种不同的颜色C.APM拿 ...