网上关于Spring事务传播性以及隔离型的文章漫天盖地,还有不负责任的直接复制名词意思,文章虽然很多却是看的云里雾里,我们今天将给出案例分别和大家一起学习。
1、spring给出经常面试的考点Spring事务的4个特性含义---这个很容易理解
2、spring事务传播特性的定义以及案例分析
这四个英文单词拼写我一直记不住,求记忆方法
我们先给出定义再分别进行简单的代码分析
给出百度图片,请大家参考,首先生命力如果想在工程中运用事务spring 的xml必须开启事务,以下这些特性一般都是在xml属性中进行配置。
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
类似这种的配置一定要有,否则万事具备只欠东风,这个是DB事务有JTA和JPA以及Herbernate等,这里就不展开说明,可自行百度。
无事务运行
![
qq'q](http://college.creditease.cn/resources/upload/image/20200804/1596529605681003338.jpeg)
事务的传播特行为为required
结果是因为主键冲突将事务进行了回滚,所以两条数据都没有插入进去。
事务的传播行为性为supports
因为调用方未用事务那么就在非事务中运行,所以插入了first的第一条数据。
事务的传播行为为manatory
因为调用的外层没有事务,所以两条数据没有插入。大家想想下面这种写法会发生什么现象
事务的传播行为mandatory
事务的传播行为required_new
结果和require一样,两条数据都没有入库,唯一健冲突导致第一条数据回滚,大家可以思考下我下面这两种情况。
情景1新起的事务抛出异常会不会让外围事务回滚?
情景2外围事务失败会不会导致新起事务已提交的回滚?
![qqq
](http://college.creditease.cn/resources/upload/image/20200804/1596529886418082560.jpeg)
事务的传播行为not_suppoted
这种情景下,如果你根据我的思路一步走的应该可以想到id 为17的入库,第二条主键冲突虽然然而notSupportSonTransationsl()这个方法没有事务所以不影响第一条入库情况,但是外围事务id为16的要进行回滚了,所以库中只有一条数据id=17的。
事务的传播行为NEVER
事务的传播行为nested
事务的传播行为级别简单的演示完毕
作者:宜信技术学院,王巧敏
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。