网上关于Spring事务传播性以及隔离型的文章漫天盖地,还有不负责任的直接复制名词意思,文章虽然不少倒是看的云里雾里,咱们今天将给出案例分别和你们一块儿学习。面试
一、spring给出常常面试的考点Spring事务的4个特性含义---这个很容易理解spring
二、spring事务传播特性的定义以及案例分析 ide
这四个英文单词拼写我一直记不住,求记忆方法学习
原子性(Atomicity):事务是一系列原子操做,要么所有成功,要么所有失败。测试
一致性(Consistency):一旦完成(不论是成功仍是失败),确保它所在的一系列业务状态保持一致,状态都是成功,或者都是失败,不能一部分红功一部分失败。ui
隔离性(Isolation):不一样事务同时进行某项业务,处理相同的数据时候,须要保证事务之间相互独立,互相之间数据不影响。3d
咱们先给出定义再分别进行简单的代码分析code
给出百度图片,请你们参考,首先生命力若是想在工程中运用事务spring 的xml必须开启事务,如下这些特性通常都是在xml属性中进行配置。xml
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
相似这种的配置必定要有,不然万事具有只欠东风,这个是DB事务有JTA和JPA以及Herbernate等,这里就不展开说明,可自行百度。blog
无事务运行
事务的传播特行为为required
结果是由于主键冲突将事务进行了回滚,因此两条数据都没有插入进去。
事务的传播行为性为supports
由于调用方未用事务那么就在非事务中运行,因此插入了first的第一条数据。
事务的传播行为为manatory
由于调用的外层没有事务,因此两条数据没有插入。你们想一想下面这种写法会发生什么现象
事务的传播行为mandatory
事务的传播行为required_new
结果和require同样,两条数据都没有入库,惟一健冲突致使第一条数据回滚,你们能够思考下我下面这两种状况。
情景1新起的事务抛出异常会不会让外围事务回滚?
情景2外围事务失败会不会致使新起事务已提交的回滚?
事务的传播行为not_suppoted
这种情景下,若是你根据个人思路一步走的应该能够想到id 为17的入库,第二条主键冲突虽然然而notSupportSonTransationsl()这个方法没有事务因此不影响第一条入库状况,可是外围事务id为16的要进行回滚了,因此库中只有一条数据id=17的。
事务的传播行为NEVER
事务的传播行为nested
事务的传播行为级别简单的演示完毕
做者:宜信技术学院,王巧敏