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框架虽然提升了效率,偶尔也会产生意外的问题,且行且研究。

  • 相关阅读:
    从dotNet到VB6之模仿构造OleDbDataAdapter与dataset结合
    编程的偷懒艺术与美感
    给您参考,现在开发数据库项目用.net 2005成熟吗?还是用.net2003比较有保证
    access数据库版权及容量问题
    中天股票数据格式
    受伤与药油的最佳搭配
    关于发布各种股票软件数据格式
    .net 与flash8传递(互传)数组的技巧
    我的C语言合集
    ZOJ 1205 Martian Addition 解题报告
  • 原文地址:https://www.cnblogs.com/androidsuperman/p/9013094.html
Copyright © 2011-2022 走看看