首页 > 作文

springboot多个service互相调用的事务处理方式

更新时间:2023-04-05 22:18:57 阅读: 评论:0

多个rvice互相调用的事务处理

今天,想在一个rvice的方法a中,调用另一个rvice的方法b,方法a和方法b均存在数据库插安福中学入操作,并且@transaction注解也都加了,但是当b方法中抛出异常时,a中的插入语句还是能够执行成功。

注解配置如下

百思不得其解,再查找了相关资料后,问题还是出在@transactio工厂长n注解的配置上,需要配置异常回滚。

这样,当b方法中抛出异常时,a中的操作也会进行回滚,事务就会起到控制作用。

spring事务调用rvice和rvice之间的调用

同一个类的不同方法,a方法没有@transactional,b方法有@transactional,a调用b方法,事务不起作用

原理解析

spring 在扫描bean的时候会扫描方法上是否包含@transactional注解,如果包含,spring会为这个bean动态地生成一个子类(即代理类,proxy),代理类是继承原来那个bean的。

此时,当这个有注解的方法被调用的时候,实际上是由代理类来调用的,代理类在调用之前就会启动transaction。

然而,如果关于冬天的歌曲这个有注解的方法是被同一个类中的其他方法调用的,那么该方法的调用并没有通过代理类,而是直接通过原来的那个bean,所以就不会启动transaction,我们看到的现象就是@transactional注解无效。

那回到一开始的问题,我们调用的方法a不带注解,因此代理类雨天图片不开事务,而是直接调用目标对象的方法。

当进入目标对象的方法后,执行的上下文已经变成目标对象本身了,因为目标对象的代码是我们自己写的,和事务没有半毛钱关系,此时你再调用带注解二十一天的方法,照样没有事务,只是一个普通的方法调用而已。

简单来说,内部调用本类方法,不会再走代理了,所以b的事务不起作用

以上为个人经验,希望能给大家一个参考,也希望大家多多支持www.887551.com。

本文发布于:2023-04-05 22:18:56,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/3125ab8d56c480e62a0c77aa9d46425e.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:springboot多个service互相调用的事务处理方式.doc

本文 PDF 下载地址:springboot多个service互相调用的事务处理方式.pdf

标签:方法   注解   事务   对象
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图