Spring事务管理

//事务的传播行为

int getPropagationBehavior();

 

//事务的隔离级别

int getIsolationLevel();

 

//事务的过期时间

int getTimeout();

 

//事务的读写特性

boolean isReadOnly();

 

//事务名

String getName();

 

1.什么是事务?

事务是程序中一系列严密的操作,所有操作执行必须成功完成,否则在每个操作所做的更改将会被撤销。这也是事务的原子性(要么成功,要么失败)

数据库向用户提供保存当前程序状态的方法,叫事务提交(commit);当事务执行过程中,使数据库忽略当前的状态并回到前面保存的状态的方法叫事务回滚。

 

2.事务的传播机制

以spring的事务传播机制为例子:

spring事务机制主要包括声明式事务和编程式事务。(编程式事务在开发中得不到广泛应用,声明式事务较为常见)。我们在使用Spring声明式事务时,有一个非常重要的概念就是事务属性。事务属性通常由事务的传播行为,事务的隔离级别,事务的超时值和事务只读标志组成。我们在进行事务划分时,需要进行事务定义,也就是配置事务的属性。

 

事务的传播属性:

(1)spring在TransactionDefinition接口中定义了七个事务传播行为(我们也可以通过枚举类Propagation类调用):

①propagation_requierd:如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中,这是最常见的选择。

②propagation_supports:支持当前事务,如果没有当前事务,就以非事务方法执行。

③propagation_mandatory:支持使用当前事务,如果当前事务不存在,则抛出Exception。

④propagation_requierd_new:新建事务,如果当前存在事务,就把当前事务挂起。

⑤propagation_not_supported:无事务执行,如果当前事务存在,把当前事务挂起。

⑥propagation_never:无事务执行,如果当前有事务则抛出Exception。

⑦propagation_nested:如果当前存在事务,则在嵌套事务内执行,如果当前没有事务,则执行与propagation_requierd类似的操作。

使用springAOP来声明式事务,会根据事务的属性,自动在方法调用之前决定是否开启一个新的事务,并在方法执行之后决定事务提交或者是回滚事务。spring默认的事务传播行为是propagation_requierd,它适合于绝大多数情况。嵌套事务一个非常重要的概念就是内层是无依赖于外层事务,外层事务失败时,会回滚内层事务所做的动作,而内层是无操作失败并不会引起外层事务的回滚。

 

3.事务的隔离级别(Isolation Level):

首先说明一下事务并发引起的三种情况:

1)dirty reads 脏读

2)Non-repeatable reads 不可重复度

3)Phantom reads 幻象读

 

非重复读和幻象读的区别:

非重复读是指同一查询在同一事务中多次进行,由于其他提交事务所做的修改或者删除,每次返回不同的结果集,此时发生非重复读。

幻象读是指统一查询在同一事物中多次执行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时发生幻象读。

表面上看,区别就在于非重复读能看见其他事物提交的修改和删除,而幻象能看见其他事务的插入。

 

 

事务的隔离级别?

1)default(默认):这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别,另外四个与JDBC的隔离级别相对应。

2)read_uncommited(读未提交):事务的最低隔离级别,它允许另外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读,不可重复度和幻读。

3)read_commited(读已提交):保证一个事务修改的数据提交之后才能被另一个事务看读取,另外一个事务不能读取该事务未提交的数据。这种事务隔离级别会避免脏读的出现买的那是可能会出现幻读和不可重复读。

4)repeatable_read(可重复读):这种隔离级别可以防止脏读和不可重复读,但是可能会出现幻象读,它除了保证一个事务不能读取另一个事务未提交的数据以外,还保证了不可重复读。

5)serializable(串行化):这是话费最高代价但是最可靠的事务隔离级别,事务被处理为顺序执行,除了防止脏读和不可重复读以外,还避免了幻象读。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值