自学内容网 自学内容网

【Spring】本类方法调用事务失效

本类方法调用事务失效

同一个对象内事务方法互相调用默认失败,因为绕过了代理对象。相当于b、c的事务不会生效,和a共用一个事务。

   @Transactional(timeout = 30)
    public void a(){
        b();
        c();
    }

    @Transactional(propagation = Propagation.REQUIRED,timeout = 2)
    public void b(){
    }

    @Transactional(propagation = Propagation.REQUIRES_NEW,timeout = 20)
    public void c(){
    }

解决

  1. 引入aop依赖,使用里面的aspectj做动态代理
        <!--引入aop依赖,使用里面的aspectj做动态代理-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
  1. 开启aspectj动态代理功能,并对外暴露代理对象。以后所有动态代理都是用aspectj创建(即便没有接口也可以创建动态代理)
@EnableAspectJAutoProxy(exposeProxy= true)
  1. 使用动态代理调用
    @Transactional(timeout = 30)
    public void a(){
        OrderServiceImpl orderService = (OrderServiceImpl) AopContext.currentProxy();
        orderService.b();
        orderService.c();
    }

原文地址:https://blog.csdn.net/chukcat/article/details/143690447

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!