事务
在软件开发领域,全有或全无的操作被称为事物(transaction)。事务允许你将几个操作组合成一个要么全部发生要么全部不发生的工作单元。
事务的特性
- 原子性(Atomic)
事务是由一个或多个活动所组成的一个工作单元。原子性确保事务中的工作要么全部发生要么全部不发生。如果所有的活动都成功了,那么事务也就成功了,如果有任意一个活动失败,那么整个事务也就失败并且进行回滚。
- 一致性(Consistent)
一旦事务完成(不管成功还是失败),系统必须确保他所建模的业务处于一致的状态。现实的数据不应该被损坏。
- 隔离性(Isolated)
事务允许多个用户对相同的数据进行操作,每个用户的操作不会与其他用户纠缠在一起。因此,事务应该彼此隔离,避免发生同步读写相同数据的事情(注意的是,隔离性往往涉及到锁定数据库中的行或者表)。
- 持久性(Durable)
一旦事务完成,事务的结果应该持久化,这样就能从任何系统的系统奔溃中回复过来。这一般会涉及将结果存储到数据库或者其他形式的持久化存储中。
Spring对事务的支持
- 编码式事务
编码式事务允许用户在代码中精确定义事务的边界 - 声明式事务
声明式事务(基于AOP)有助于用户将操作与事务规则进行解耦。
选择编码式事务还是声明式事务很大程度上是在细粒度和易用性之间进行权衡。当你使用编码式事务,你能够精确的控制事务的边界,他们的开始于结束取决于你的需求。
事务管理器
Spring并不直接管理事务,而是提供了多种事务管理器,他们将事务管理的职责委托给 JTA
或其他持久化机制所提供的平台相关事务实现。每个事务管理器充当某一个特定平台的事务实现的门面。这是的Spring在使用事务时,几乎不用关注实际的事务实现时什么。