本地事务方法互调的问题

@Service("orderService")
public class OrderServiceImpl extends ServiceImpl<OrderDao, OrderEntity> implements OrderService {

    // 事务使用代理对象来控制的
    @Transactional(timeout = 30)
    public void a() {
        // 同一个对象内,事务方法互调默认被调的方法事务失效,使用当前调用方法的事务.原因绕过了代理对象
//        b();  b的事务不生效
//        c();  c的事务不生效
//        this.b();  b的事务不生效
//        this.c();  c的事务不生效

        /**
         * 解决:使用打理对象来调用事务方法
         * 1.引入spring-boot-starter-aop,引入了aspectj
         * 2.@EnableAspectJAutoProxy(exposeProxy = true),开启aspectj的动态代理.
         *   以后所有的动态代理都是aspectj创建的(即使没有接口也可以创建动态代理,jdk动态代理要有接口)
         *   exposeProxy = true 对外暴露代理对象
         * 3.使用AopContext.currentProxy获取代理对象,代理对象调用事务方法
         */
        OrderServiceImpl orderService =(OrderServiceImpl) AopContext.currentProxy();
        orderService.b();  // b的事务生效
        orderService.c();  // c的事务生效
    }

    @Transactional(timeout = 20)
    public void b() {

    }

    @Transactional(timeout = 10)
    public void c() {

    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值