分布式事务

196 阅读2分钟

layout: post title: "分布式事务" subtitle: " "怎么配置、有哪几种配置方法"" date: 2018-10-22 06:00:00 author: "青乡" header-img: "img/post-bg-2015.jpg" catalog: true tags: - transaction - distributed transaction

什么是分布式事务

一个事务方法,包含了多个sql,每个sql访问的数据库不同,即一个事务方法访问了多个数据库,所谓分布式,就是数据库的分布式/集群,因为有多个才会导致分布式的问题。

为什么多个数据库就会导致分布式事务的问题呢?因为数据库的事务只支持单机,即单个数据库。在单个数据库里,一个事务方法的多个sql,要么全部提交,要么全部不提交,这就是单机数据库事务。而在多个数据库里,就不支持事务,因为不同数据库的事务没有任何关系。这个时候只能在应用程序/代码层面来实现和确保事务功能。

协议

两阶段提交协议。

规范

分布式事务有个专门的规范组织,就是XA组织。zh.wikipedia.org/wiki/X/Open…

既然是一种规范,自然有的解决方案和实现遵守规范,有的解决方案不遵守规范。www.javaworld.com/article/207…

解决方案

基于两阶段提交协议的解决方案。
1.try
2.confirm
3.cancel

基于单机数据库的事务。

juejin.cn/post/684490…

java事务

j2ee事务。

spring分布式事务

spring本身是不支持分布式事务的,因为支持和不支持事务,不是由应用层说了算,而是由数据库层说了算,数据库厂商不支持,那么应用层也不支持,只能想一些方法去解决这个问题,而且还不一定解决的好。也就是说,应用层面的解决方案的成功率并不是100%成功,而是尽量提高分布式事务的成功概率。

spring文档也没有分布式事务的内容。docs.spring.io/spring/docs…

spring boot分布式事务

spring boot本身只是对spring MVC和spring的一个整合,所以事务和分布式事务,与spring是一致的。 docs.spring.io/spring-boot…

hibernate事务

docs.jboss.org/hibernate/o…

ibatis事务

ibatis.apache.org/docs/java/p…

参考

my.oschina.net/pingpangkua…

www.javaworld.com/article/207…

docs.oracle.com/javaee/6/tu…

www.infoq.com/minibooks/J…