本地事务方法互调的问题

@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() {

    }

}

 

©️2020 CSDN 皮肤主题: 技术工厂 设计师:CSDN官方博客 返回首页