Spring事务管理(一)快速入门

技术文章第一时间送达!

 

 

说起事务,大家应该多多少少用过,尤其是在一个service方法中调用多次dao操作,我们一定要用到事务( @Transational注解),那么这个事务的默认隔离级别和传播机制是什么呢?

先来讲讲 脏读 不可重复读 和 幻读

  1. 脏读:我们在并发编程中是很熟悉的,通俗的讲就是你读得数据已经被修改了,已经过时失去意义了。

  2. 不可重复读: 同一个事务里面多次读取同一行数据,却返回不同的结果。

  3. 幻读:同样一笔查询在整个事务过程中多次执行后,查询所得的结果集不一样。

事务四大特性 ACID

1. 原子性 (Atomicity)

要求事务所包含的全部操作是一个不可分割的整体,如果有一步发生异常,则全部不提交。

2. 一致性 (Consistency)

A给B转钱,A减和B增这两个操作必须保持一致。

3. 隔离性 (Isolation)

事务会将一部分数据与其他事务隔离,防止脏读等。

4. 持久性 (Durability)

事务的结果被写到持久化存储器中。

事务四大隔离级别

隔离级别越高,则性能相对越低,反之亦然。

1. Read Uncommitted

最低的隔离级别,跟你直译的意思一样:可以读取其它事务未完成的结果。(脏读)

很明显, 脏读 不可重复读 和 幻读这三个问题它都有。

2. Read Committed

大部分数据库采用的默认隔离级别,比上一个隔离级别多了限定:在该事务完成后,才能读取该事务的数据更新后的结果。

它可以避免脏读,但是也有不可重复读取和幻读的问题。

3. Repeatable Read

可以保证在整个事务的过程中,对同一笔数据的读取结果是相同的,不管其他事务是否同时在对同一笔数据进行更新,也不管其他事务对同一笔数 据的更新提交与否。

Repeatable Read隔离级别避免了脏读和不可重复读取的问题,但无法避免幻读。

4. Serializable

最为严格的隔离级别,所有的事务操作都必须依次顺序执行,可以避免其他隔离级别遇到的所有问题,是最为安全的隔离级别, 但同时也是性能最差的隔离级别。

通常情况下,我们会使用其他隔离级别加上相应的并发锁的机制来控制对数据的访问,这样既保证 了系统性能不会损失太大,也能够一定程度上保证数据的一致性。

Spring事务传播机制

从JDBC的事务说起

我们都知道,JDBC给我们提供了事务。

 
  1. try{

  2.     con.setAutoCommit(false);//开启事务

  3.     ......

  4.     con.commit();//try的最后提交事务      

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值