Spring的事务管理简介

什么是事务:

比如去ATM机取1000块钱,大体有两个步骤:首先输入密码金额,银行卡扣掉1000元钱;然后ATM出1000元钱。这两个步骤必须是要么都执行要么都不执行。如果银行卡扣除了1000块但是ATM出钱失败的话,将会损失1000元;如果银行卡扣钱失败但是ATM却出了1000块,那么银行将损失1000元。所以,如果一个步骤成功另一个步骤失败对双方都不是好事,如果不管哪一个步骤失败了以后,整个取钱过程都能回滚,也就是完全取消所有操作的话,这对双方都是极好的。 
事务就是用来解决类似问题的。事务是一系列的动作,它们综合在一起才是一个完整的工作单元,这些动作必须全部完成,如果有一个失败的话,那么事务就会回滚到最开始的状态,仿佛什么都没发生过一样。 
在企业级应用程序开发中,事务管理必不可少的技术,用来确保数据的完整性和一致性。 

 


事务有四个特性:ACID

  • 原子性(Atomicity):事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用。
  • 一致性(Consistency):一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态,而不会是部分完成部分失败。在现实中的数据不应该被破坏。
  • 隔离性(Isolation):可能有许多事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏。
  • 持久性(Durability):一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响,这样就能从任何系统崩溃中恢复过来。通常情况下,事务的结果被写到持久化存储器中。

事务管理器

Spring并不直接管理事务,而是提供了多种事务管理器,他们将事务管理的职责委托给Hibernate或者JTA等持久化机制所提供的相关平台框架的事务来实现。 
Spring事务管理器的接口是org.springframework.transaction.PlatformTransactionManager,通过这个接口,Spring为各个平台如JDBC、Hibernate等都提供了对应的事务管理器,但是具体的实现就是各个平台自己的事情了

1.DataSourceTransactionManager :底层使用JDBC管理事务

2.HibernateTransactionManager :底层使用Hibernate管理事务

 

 

Spring事务的传播属性

PROPAGATION_REQUIRED        支持当前事务,如果当前没有事务,则新建一个事务。

PROPAGATION_SUPPORTS       支持当前事务,如果当前没有事务,则以非事务方式执行。

PROPAGATION_MANDATORY         支持当前事务,如果当前没有事务,则抛出异常。

PROPAGATION_REQUIRES_NEW     新建事务,如果当前存在事务,把当前事务挂起。

PROPAGATION_NOT_SUPPORTED     以非事务方式执行,如果当前存在事务,把当前事务挂起。

PROPAGATION_NEVER         以非事务方式执行,如果当前存在事务,则抛出异常。

PROPAGATION_NESTED            如果当前存在事务,则在嵌套事务内执行,如果当前没有事务,则新建一个事务

 

Spring事务的隔离级别

ISOLATION_DEFAULT         默认隔离级别,使用数据库默认的事务隔离级别。

ISOLATION_READ_UNCOMMITTED    最低的隔离级别,允许一个事务查看另一个事务未提交的数据。会产生脏读,不可重复读,幻读。

ISOLATION_READ_COMMITTED    保证一个事务修改的数据需要提交后才能被另一个事务读取,锁定正在读取的行。能够避免脏读。

ISOLATION_REPEATABLE_READ     锁定读取的所有行。能够避免脏都,不可重复读。

ISOLATION_SERIALIZABLE       最高的隔离级别,锁住表,事务被处理为顺序执行。能够避免脏读,不可重复读,幻读。

脏数据

  1. 读问题
    1. 脏读 :一个事务读到另一个事务未提交的数据
    2. 不可重复读 :一个事务读到另一个事务已经提交的update的数据,导致一个事务中多次查询结果不一致
    3. 虚读、幻读 :一个事务读到另一个事务已经提交的insert的数据,导致一个事务中多次查询结果不一致。

 


  1.  

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值