zoukankan      html  css  js  c++  java
  • 事务失效场景

    前提是讨论同一个类中,一般有4中使用场景:

    1:外层test1()方法加@Transactional注解,内层调用的test2()方法不加事务注解

    2:外层test1()方法加@Transactional注解,内层调用的test2()方法也加事务注解

    3:外层test1()方法不加事务注解,内层调用的加事务注解

    4:外层test1()方法不加事务注解,内层调用的也不加事务注解

    场景一:

    @Transactional

    public void  test1(OrderInfo  orderInfo){

      // 执行插入操作

      orderMapper.insert(orderInfo );  

      // 执行通知类方法

      this.test2(orderInfo );

    }

    public void test2(OrderInfo  orderInfo){

      mesgMapper.insert(orderInfo );

    }

    这种场景下,前提在test1方法的事务生效时,那么对order和mesg表的插入操作,同属于一个事务,要么都成功,要么都失败

    场景二: 

    @Transactional

    public void  test1(OrderInfo  orderInfo){

      // 执行插入操作

      orderMapper.insert(orderInfo );  

      // 执行通知类方法

      this.test2(orderInfo );

    }

    @Transactional

    public void test2(OrderInfo  orderInfo){

      mesgMapper.insert(orderInfo );

    }

    这种场景下,前提在test1方法的事务生效时,那么对order和mesg表的插入操作,test2方法的事务生不生效,结果都是一样,效果同场景一,同属于一个事务,要么都成功,要么都失败

    另外:若想使test2方法注解生效,这里不能使用this.的方式调用,需要使用代理类调用 AopContext.currentProxy() ;同时可以使用@Transactional(propagation = Propagation.REQUIRES_NEW)开启新事物

    场景三: 

    public void  test1(OrderInfo  orderInfo){

      // 执行插入操作

      orderMapper.insert(orderInfo );  

      // 执行通知类方法

      this.test2(orderInfo );

    }

    @Transactional

    public void test2(OrderInfo  orderInfo){

      mesgMapper.insert(orderInfo );

    }

    这种场景下,那么对order和mesg表的插入操作,test2方法的事务失效,不能使用this.的方式调用,需要使用代理类调用 (AopContext.currentProxy() )

    场景四: 

     public void  test1(OrderInfo  orderInfo){

      // 执行插入操作

      orderMapper.insert(orderInfo );  

      // 执行通知类方法

      this.test2(orderInfo );

    }

    public void test2(OrderInfo  orderInfo){

      mesgMapper.insert(orderInfo );

    }

     这种场景下,那么对order和mesg表的插入操作,各自执行插入操作后,立马自动提交事务了

    至于@Transactional注解原理,我们另外一篇中见~~~

  • 相关阅读:
    文件输入使System.out.println("程序执行完毕!");这句话的内容输入到文件中
    TI CC2541.h的头文件 for IAR
    状态添加Android游戏开发十日通(4)行走,跳跃,碰撞检测
    命令分析分析企业内连接Exchange 移动设备!
    寄存器数据问题反馈集锦W5200/W5300相关
    发票选择SAP 校验发票时:科目5101140100已设置为与税务不相关
    重写方法Android中的HttpsURLConnection连接
    生成数组C面试题精选
    函数路径Croc Champ 2013 Round 2 题解java教程
    排名中国重读“发展Linux,中日两国之比较”有感java教程
  • 原文地址:https://www.cnblogs.com/kobe-lin/p/11729896.html
Copyright © 2011-2022 走看看