Spring-事务管理(Transaction)

1.事务介绍

事务(Transaction):访问并能更新数据库中数据项的一个程序执行单元。

事务是一系列的动作,它们综合在一起才是一个完整的工作单元,这些动作必须要么全部完成,要么什么都不做,如果有一个失败了的话,那么事务就会回滚(RollBack)到最开始的状态,在企业级的应用程序中,事务管理是必不可少的,用来确保数据的完整性和一致性。

事务的特性(ACID)

  1. 原子性(Atomicity):事务是一个原子操作,事务的原子性保证这些动作要么全部都做,要么什么都不做。
  2. 一致性(Consistency):一旦事务完成(不论是成功还是失败),事务必须始终保持系统处于一致的状态,不管在任何给定的时间并发事务由多少。也即是说,如果事务是并发多个,系统也必须入串行事务一样操作,其主要特征是保护性和不可变性,以转账案例为例子,假设有5个账户,每个账户余额是100,那么五个账户的总额是500,不管并发是多少,五个账户之间怎么频繁进行转账,总额都会保证是500,这就是保护性和一致性。
  3. 隔离性(Isolation):可能有许多事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏。
  4. 持久性(Durability):事务一旦完成,事务的结果必须被持久化到存储器中。

举个例子,也是后面实现过程中会一直用的例子:
1.Tom和Marry在某银行都有账户,且他们每个人的账户中都有1000元

2.Tom要向Marry汇款100元

那么这个汇款的执行可以分成下面几步:

1.检测Tom的账户里面有没有100块钱,如果有则允许汇款,如果没有则不允许汇款

2.Tom的银行账户,账户余额减去100元

3.Marry的银行账户,账户余额加上100元

那么问题来了,在2步和3步之间,可能会产生故障或者异常,最low的例子是2步完成之后,银行的服务器断电了。那么这个时候会不会出现Tom的银行账户少了100元,而Marry的银行账户却没有增加100元呢?

这个问题可以先说下:如果没有使用事务管理,这种情况确实是存在的。

那么如何模拟服务器断电这种异常呢:那就是在2步和3步之间加入一个异常(除零异常就可以)

Spring的事务管理的核心接口:

接着打开spring-tx包,可以继续查看org-springframework.transaction包

TransactionDefinition    PlatformTransactionManager   TransactionStatus是Spring事务管理的三个顶级接口,下面我们用图来解释下这三个接口之间的关系:

PlatformTransaction

猜你喜欢

转载自www.cnblogs.com/fangpengchengbupter/p/9293717.html