zoukankan      html  css  js  c++  java
  • @transactional注解在什么情况下会失效,为什么。

    @transactional注解在什么情况下会失效,为什么。

    @Transactional的使用:

    @Transactional
    public void updateUserAndAccount(String user) {
        dao1.updateUserAccount();
        dao2.updateAccountAmount()
    }
    

    在xml中配置spring事务管理类DataSourceTransactionManager

    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dynamicDataSource"></property>
    </bean>
    <tx:annotation-driven transaction-manager="txManager" proxy-target-class="true" />
    

    调用含注解的方法并抛异常,执行有异常抛出,z1表新增记录、z2表无新增记录,事务失效

    public void testTransaction() {
        testTransaction3();
    }
    @Transactional
    public void testTransaction3() {
        db.update("insert into z1(c1) values('2')");
        // 测试
        String str = null;
        if (str.startsWith("111")) {
            db.update("insert into z1(c1) values('adff2')");
        }
    }
    

    修改后:

    @Transactional
    public void testTransaction() {
        db.update("insert into z1(c1) values('2')");
        testTransaction2();
    }
    public void testTransaction2() {
        // 主动抛出异常 测试回滚
        String str = null;
        if (str.startsWith("111")) {
            db.update("insert into z2(c1,c2) values('2','3')");
        }
    }
    

    在代理下(默认或当配置为proxy-target-class="true"),只有当前代理类的外部方法调用注解方法时代理才会被拦截。事实上,这意味着:一个目标对象的方法调用该目标对象的另外一个方法,即使被调用的方法已使用了@Transactional注解标记,事务也不会有效执行。

    另外关于@Transactional的说明,Spring 有一段描述关于方法可见性:
    @Transactional注解只对代理类时的public方法有效,被protected、private、package-visible修饰的方法使用@Transactional注解无效,对这类方法使用事务注解,推荐使用AspectJ进行事务管理。Spring框架虽然提升了效率,偶尔也会产生意外的问题,且行且研究。

  • 相关阅读:
    anaconda环境---ubuntu下重装
    算法---Face_Recognition配置实战篇
    算法---FaceNet+mtcnn的使用记录
    算法---FaceNet理论学习篇
    算法---FaceNet在Tf下的实战篇
    ubuntu系统---切换Py2.X与Py3.X版本
    anaconda环境中---py2.7下安装tf1.0 + py3.5下安装tf1.5
    Git---初入开源代码管理库的学习过程003
    day 87 Vue学习六之axios、vuex、脚手架中组件传值
    day 86 Vue学习之五DIY脚手架、webpack使用、vue-cli的使用、element-ui
  • 原文地址:https://www.cnblogs.com/androidsuperman/p/9013094.html
Copyright © 2011-2022 走看看