zoukankan      html  css  js  c++  java
  • spring传播机制注意点

    在同一个类里面spring的传播机制是不起作用的比如说在执行saveA方法的时候调用C方法插入C设置的传播属性是不使用事物

    但是执行的效果是saveA方法抛出异常后导致C的记录回滚了也就是说明C方法设置的隔离级别不起作用。

     @Transactional
        public void  saveA() throws  Exception{
             C();
             throw  new RuntimeException();
        }
    
    
    
        @Override
        @Transactional(propagation = Propagation.NOT_SUPPORTED)
        public void C() throws Exception {
            mapper.insertEntity(entity);
        }
    接下来新创建一个serviceB类

    @Override
        @Transactional(propagation = Propagation.NOT_SUPPORTED)
        public void B() throws Exception {
            mapper.insertEntity(entity);
        }
    @Transactional
        public void  saveA() throws  Exception{
            serviceB.B();
             throw  new RuntimeException();
        }
    
    
    
        @Override
        @Transactional(propagation = Propagation.NOT_SUPPORTED)
        public void C() throws Exception {
            mapper.insertEntity(entity);
        }

    此时在调用saveA方法B的记录就没有回滚了   也就是说spring的传播机制是针对于类的   然后同一个类方法相互调用隔离级别是不起作用的。

    这个方法是通过spring的AOP类CglibAopProxy的内部类DynamicAdvisedInterceptor调用的,而DynamicAdvisedInterceptor继承了MethodInterceptor,用于拦截方法调用,并从中获取调用链。


    如果是在同一个类中的方法调用,则不会被方法拦截器拦截到,因此事务不会起作用,必须将方法放入另一个类,并且该类通过spring注入



  • 相关阅读:
    英语 年份 读法
    香农第二定理的理解
    为什么正规子群在环里的对应概念叫理想,而不叫正规子环呢?
    vue 时间组件限制选择范围
    ubuntu 设置 shell脚本双击运行
    单元测试规范
    vue-element-admin项目配置运行
    SqlServer表字段查询
    git提交部分文件
    Asp.NetCore+Elasticsearch+Kibana日志记录
  • 原文地址:https://www.cnblogs.com/root429/p/9251331.html
Copyright © 2011-2022 走看看