[b]事务[/b]
原子性,事务要么全执行,要么全不执行。
一致性,事务开始前和开始后,所有数据保证一致状态。
持久性,保存在数据库是持久不变的。
隔离性,同一时间同一事物,不同事务是隔离的。
[b]传播行为:[/b]
1、PROPAGATION_REQUIRED:如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该设置是最常用的设置。
2、PROPAGATION_SUPPORTS:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就以非事务执行。‘
3、PROPAGATION_MANDATORY:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就抛出异常。
4、PROPAGATION_REQUIRES_NEW:创建新事务,无论当前存不存在事务,都创建新事务。
5、PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
6、PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
7、PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类
[url]http://blog.youkuaiyun.com/hsgao_water/article/details/52860380[/url]
[b]隔离级别:[/b]
数据库事务的隔离级别有4个,由低到高依次为Read uncommitted、Read committed、Repeatable read、Serializable,这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。
[img]http://dl2.iteye.com/upload/attachment/0128/6805/29efd413-cfac-30be-b198-50051232b328.png[/img]
1、ISOLATION_READ_UNCOMMITTED:这是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据。
这种隔离级别会产生脏读,不可重复读和幻像读。
2、ISOLATION_READ_COMMITTED:保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据
3、ISOLATION_REPEATABLE_READ:这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。
它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读)。
4、ISOLATION_SERIALIZABLE:这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。
除了防止脏读,不可重复读外,还避免了幻像读。
[url]http://blog.youkuaiyun.com/qq_33290787/article/details/51924963[/url]
[b]事务三种模式[/b]
自动提交事务:
显示事务:每个事务均以begin
隐式事务: mysql conminit=0
[b]分布式事务:[/b]
订单库,支付库,物流库在不同的数据库
JDBC事务,基于Connection对象控制事务,局限性在一个数据库链接内。
JTA事务,在多个网络计算机并更新数据,可以分布在多个数据库上。
容器事务,容器事务主要是j2ee应用服务器提供的,容器事务大多是基于JTA完成,这是基于JNDI想当复杂的api实现
在java环境中,多个xa(定义了分布式事务管理模型)资源
应用程序,事务管理器,资源管理器,通信资源管理器
[img]http://dl2.iteye.com/upload/attachment/0128/6809/4b44bcb1-be84-3ec5-aded-f7892acef7eb.png[/img]
[img]http://dl2.iteye.com/upload/attachment/0128/6811/442658d7-c4fa-39c8-b001-5ca4d11e91df.png[/img]
[img]http://dl2.iteye.com/upload/attachment/0128/6813/c5d1ceb1-5f96-3ac6-a4d0-89a09b5b2737.png[/img]
[b]tomcat+Spring+JTA如何实现[/b]
Atomikos中间件
Jotm(停止维护)
Bitronix(停止维护)
数据库连接池基于xa规范(druid)
<!-- https://mvnrepository.com/artifact/com.atomikos/transactions-jta -->
<dependency>
<groupId>com.atomikos</groupId>
<artifactId>transactions-jta</artifactId>
<version>4.0.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.atomikos/transactions-jdbc -->
<dependency>
<groupId>com.atomikos</groupId>
<artifactId>transactions-jdbc</artifactId>
<version>4.0.6</version>
</dependency>
三种方式:
注解@Transtion
事务模板
编码式事务
[img]http://dl2.iteye.com/upload/attachment/0128/6835/6ed78a7d-a672-3345-8a2b-28e2b2c4d846.png[/img]
[img]http://dl2.iteye.com/upload/attachment/0128/6837/c8f5517f-740b-32b2-a5ed-8beb7bf27e4a.png[/img]
[img]http://dl2.iteye.com/upload/attachment/0128/6841/e5560520-eaa2-3d34-a3f0-dfb505a96a14.png[/img]
[img]http://dl2.iteye.com/upload/attachment/0128/6843/1a801caf-caf3-3f84-b35f-072ffafa4e3a.png[/img]
[img]http://dl2.iteye.com/upload/attachment/0128/6845/be52f5dc-5cbf-3002-bac4-2c9c46caf4ca.png[/img]
[img]http://dl2.iteye.com/upload/attachment/0128/6847/82cfb0bf-b5b4-35fa-ac38-12404b9e7af5.png[/img]
关于一致性:
[img]http://dl2.iteye.com/upload/attachment/0128/6833/fabe8143-8a0f-37b7-898f-f93843074603.png[/img]
CAP与BASE理论
[img]http://dl2.iteye.com/upload/attachment/0128/6821/5a26a8d7-df99-3d82-88dc-34b726f36f17.png[/img]
二阶段提交2P
[img]http://dl2.iteye.com/upload/attachment/0128/6823/a914efe3-123f-3a17-ad4c-4364955e6052.png[/img]
三阶段提交3P
[img]http://dl2.iteye.com/upload/attachment/0128/6827/5a0615a0-0ad8-3af2-b61c-61ad7b75cedd.png[/img]
两军问题:
[img]http://dl2.iteye.com/upload/attachment/0128/6829/6aa388e4-9e44-303c-bd7c-124e4d65a303.png[/img]
拜占庭将军与Paxos协议
[img]http://dl2.iteye.com/upload/attachment/0128/6831/ab8bdc50-f229-3da0-8daa-612721216a7e.png[/img]