网上对于Spring事务流传性以及隔离型的文章漫天盖地,还有不负责任的间接复制名词意思,文章尽管很多却是看的云里雾里,咱们明天将给出案例别离和大家一起学习。
1、spring给出常常面试的考点Spring事务的4个个性含意---这个很容易了解
2、spring事务流传个性的定义以及案例剖析
一、事务的个性ACID
这四个英文单词拼写我始终记不住,求记忆办法
- 原子性(Atomicity):事务是一系列原子操作,要么全副胜利,要么全副失败。
- 一致性(Consistency):一旦实现(不论是胜利还是失败),确保它所在的一系列业务状态保持一致,状态都是胜利,或者都是失败,不能一部分胜利一部分失败。
- 隔离性(Isolation):不同事务同时进行某项业务,解决雷同的数据时候,须要保障事务之间互相独立,相互之间数据不影响。
- 持久性(Durability):一旦事务实现,无论产生什么系统性谬误,事务执行后的数据都被长久化了,不会因为重启或其余操作对数据进行更改。
二、spring事务流传个性的定义以及案例剖析
咱们先给出定义再别离进行简略的代码剖析
给出百度图片,请大家参考,首先生命力如果想在工程中使用事务spring 的xml必须开启事务,以下这些个性个别都是在xml属性中进行配置。
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
相似这种的配置肯定要有,否则万事具备只欠东风,这个是DB事务有JTA和JPA以及Herbernate等,这里就不开展阐明,可自行百度。
三、案例解析事务流传7大行为
1、无事务,这个时候id 为16的第一次插入胜利,第二次插入的时候失败,库中留存第一次的数据
无事务运行
2、propagation_required,默认事务的流传行为required,在进行试验2的时候将表中id为16的数据先删除免得影响接下来的测试。@Transactional(propagation=Propagation.REQUIRED) == @Transactional这两个的作用是一样的没有事务创立一个事务执行,
这个办法没有事务所以不影响第一条入库状况,然而外围事务id为16的要进行回滚了,所以库中只有一条数据id=17的。
7、 propagation_never,示意以后办法不能运行在事务当中,如果有事务则会抛出异样---->Existing transaction found for transaction marked with propagation 'never'
事务的流传行为NEVER
8、 propagation_nested,这种嵌套的事务,外围如果没有事务则本人另起一个事务,可独立与外围事务进行独自的提交或者回滚(这句话不要了解错了),上面这个案例同样的数据一条也没有落入库中,
事务的流传行为nested
事务的流传行为级别简略的演示结束
作者:宜信技术学院,王巧敏