在事务方法中调用另外一个事务方法,被调用方法的事务没起作用

在事务方法中调用另外一个事务方法,被调用方法的事务没起作用

问题描述:(例)

  service层有两个事务方法insertUser1、insertUser2, 当在insertUser1中调用insertUser2是,如果前面 方法异常,后边方法不会保存

  期望:不管insertUser1是否报错,insertUser2 都要报存数据

    @Transactional(propagation = Propagation.REQUIRED)public void insertUser1(){User user = new User("niu","男",19,"1000000");userDao.insertUser(user);this.insertUser2();//异常int a = 10/0;}@Transactional(propagation = Propagation.REQUIRES_NEW)public void insertUser2(){User user = new User("xing","女",19,"1111111");userDao.insertUser(user);}

产生问题的原因是:spring是通过代理代管理事务的,当在第一个方法insertUser1内直接调用insertUser2的时候 ,insertUser2上的事务是不会起作用的(也就是insertUser2是没有开启事务)

解决:

springboot:开始aop事务,在启动类application上添加注解@EnableAspectJAutoProxy(exposeProxy = true)

@SpringBootApplication
@EnableAspectJAutoProxy(exposeProxy = true)
public class TestbootApplication {public static void main(String[] args) {SpringApplication.run(TestbootApplication.class, args);}
}

同时在调用insertUser2时不直接调用,而是通过代理的方式调用:

将代码修改:

    @Transactional(propagation = Propagation.REQUIRED)public void insertUser1(){User user = new User("niu","男",19,"1000000");userDao.insertUser(user);//this.insertUser2();((UserService)AopContext.currentProxy()).insertUser2();//异常int a = 10/0;}@Transactional(propagation = Propagation.REQUIRES_NEW)public void insertUser2(){User user = new User("xing","女",19,"1111111");userDao.insertUser(user);}

这样在调用insertUser2的时候回起用事务管理(((UserService)AopContext.currentProxy()).insertUser2();方法的时候,会将当前事务挂起,重新开启另一个新的事务来执行语句)

可以通过以下代码来判断类是否是代理类:

boolean isProxy = AopUtils.isAopProxy((UserService)AopContext.currentProxy());
true:是代理类
false:不是代理类详细博客:https://www.cnblogs.com/micrari/p/7612962.html

posted @ 2019-03-10 00:29 巡山小妖N 阅读(...) 评论(...) 编辑 收藏

在事务方法中调用另外一个事务方法,被调用方法的事务没起作用相关推荐

  1. shell实例第19讲:一个脚本中调用另一个脚本的3种方法

    在Shell脚本中调用另一个脚本(3种方法) 准备:主脚本是second.sh,主脚本中调用first.sh 方法1:exec(1)执行方式:exec /home/weibo/shell_test/s ...

  2. 创建一个长方形类,成员域有长方形的长和宽,成员方法有计算长方形的面积,在main方法中创建长方形类对象,并调用计算长方形面积的方法。

    package TestDemo; /** 创建一个长方形类,成员域有长方形的长和宽,成员方法有计算长方形的面积.* 在main方法中创建长方形类对象,并调用计算长方形面积的方法.*/ import ...

  3. c#点击按钮调出另一个窗体_在类库或winform项目中打开另一个winform项目窗体的方法...

    本文实例讲述了在类库或winform项目中打开另一个winform项目窗体的方法.分享给大家供大家参考.具体如下: 一.问题: 假设类库或winform项目为A,另一个winform项目为B.那麽在A ...

  4. android自定义控件(6)-详解在onMeasure()方法中如何测量一个控件尺寸

    今天的任务就是详细研究一下protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)方法.如果只是说要重写什么方法有什么 ...

  5. Shell 脚本调用另一个脚本的三种方法

    文章目录 1.source 2.点号. 3.sh 命令 4.三者的区别 5.export 命令设置临时环境变量 6.export 命令设置永久环境变量 参考文献 假如有脚本 first.sh: #!/ ...

  6. python 函数参数前面两个星号_Python中参数前面一个星号两个星号(*参数,**参数)起什么作用呢?...

    摘要: 下文讲述Python中参数前面一个星号两个星号的功能分享,如下所示: 在Python语言中,我们经常看见参数前面 加上一个星号或两个星号 那么这些写法到底起什么作用呢? 下文将一一道来,如下所 ...

  7. 另一个.java文件调用_java - 如何调用另一个类“写文件”的方法? - SO中文参考 - www.soinside.com...

    在我的Android应用程序,我想有一类处理所有"写入/读取到文本文件"的行动.所以,我根本就调用我的readUserFile.java文件我想的方法.但我的方法将不会在该文件中工 ...

  8. 在一个PHP中调用另一个php函数,php调用函数 php如何调用函数?

    php如何调用函数? 1.递推 2.回归递推: 递推为正向的推导,即从前向后的分析问题,寻找递推的条件. 1-3求和为例 sum(1) = 1 0 sum(2) = 2 1 sum(3) = 3 2 ...

  9. 调用script方法_自己撸一个代码生成器输入参数和方法

    在[CodeSmith快速入门之一:初次接触CodeSmith]中,我们实现了最简单的模板,但是模板中的内容无法由用户的输入决定. 假定你女朋友要你在新年的时候说10次"I LOVE YOU ...

  10. python中如何定义一个数组_Python数组定义方法

    本文实例讲述了Python数组定义方法.分享给大家供大家参考,具体如下: Python中没有数组的数据结构,但列表很像数组,如: a=[0,1,2] 这时:a[0]=0, a[1]=1, a[[2]= ...

最新文章

  1. oracle的正则表达式(regular expression)简单介绍
  2. Type TIMESTAMP(6) of table field ‘ts‘ does not match with the physical type TIMESTAMP(3) of the ‘ts‘
  3. hash表与系统顺序寻址
  4. onbeforeunload与onunlond的区别
  5. RA维持期达标式减停生物制剂(DRESS研究)的18个月数据
  6. socket中使用心跳来检测连接是否断开[ZT]
  7. 家庭记账本开发进度6
  8. Window操作系统安全配置
  9. win7打开计算机死机,win7系统进入桌面总是死机或者卡死怎么办
  10. AutoCAD块属性提取
  11. 混凝土塔吊浇筑怎么计算机械费,秒懂塔吊和施工电梯费用的摊销成本测算~
  12. 人均劳动生产率的单位_生产率的单位是什么?
  13. TypeScript02 方法特性【参数种类、参数个数】、generate方法、析构表达式、箭头表达式、循环...
  14. 用python实现FMM和BMM
  15. 求一元二次方程的根 OpenJ_Bailian - 2707
  16. 免费edu邮箱申请注册地址
  17. 什么情况下应该选用远心镜头
  18. 把图片放大后还很清晰的办法
  19. 日期转字符串-字符串转日期
  20. 30个HTML+CSS前端开发案例(二)

热门文章

  1. 计算机性能在线测评,关于电脑性能测试的常见的几大方法
  2. springbootweb导入静态资源
  3. 回溯时间是什么意思_《凡人修仙之仙界篇》分析时间法则的不同体现形式
  4. tomcat 配置异常/404页面
  5. spring boot security学习
  6. keil4如何设置自动缩进_如何设置私聊自动回复?
  7. python累积和_python – 如何维持累积总和?
  8. python函数编程实战_(转)函数式编程实战教程(Python版)
  9. Apache Flink 零基础入门(二十)Flink kafka connector
  10. 深入理解javascript原型和闭包(3)——prototype原型