场景如下:
目标方法是插入数据到数据库中,即insert到A表,然后设置了一个切面,进入环绕通知里面,执行完目标方法后,继续执行日志记录操作,即insert到B表,此时我有个疑问insert到A表和insert到B表这两个操作是在一个事务中吗,若不是,如何保证它们是在同一个事务中呢?

解决方案 »

  1.   

    两个insert操作要在一个事务方法里,方法结束的时候,会一起commit
      

  2.   

    两个方法不是在一个类里面的,使用spring的声明式事务管理,如何实现aop环绕通知的方法和目标方法在同一个事务中呢
      

  3.   

    如果你是做日志记录,我觉得是不应该做成一个事务里的,做成异步的是最好的你说的这个估计得分场景,spring的事务也是基于aop,但这个得保证事务的aop在你的aop外层才行,如果这样你是不需要做任何配置就能保证他们在一个事务里的
      

  4.   

    做了一个验证,具体可以看一下https://blog.csdn.net/chengtanyong4777/article/details/100178668
    结论:
    若在目标方法上面加上事务,则环绕通知里面,调用目标方法之后的代码是和目标方法在同一个事务中的
      

  5.   

    业务要求不同,实现方式也不同楼主的实现方式是 对于数据库的操作要记日志到数据库(必须同时成功,日记记入不成功,正常业务操作也不进行,是占用时间的,变相的延长了业务处理时间,还对正常业务产生了影响,日志失败,业务也失败)但是这种要求本人认为一般都不这么设计
    通常做法是 maradona1984 的说法,异步处理日志,0影响