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

  • 相关阅读:
    主流浏览器默认限制的非安全端口号有哪些
    coco2dx实现翻拍效果
    iOS和android游戏纹理优化和内存优化(cocos2d-x)(转载)
    cocos2d-x如何解决图片显示模糊问题
    cocos2dx混合模式应用———制作新手引导高亮区域
    visual studio的项目属性表
    如何提高cocos2d-x-spine骨骼动画加载速度
    如何调试lua脚本
    把.pvr.ccz文件转换成png
    coco2dx加载网络图片并保存
  • 原文地址:https://www.cnblogs.com/androidsuperman/p/9013094.html
Copyright © 2011-2022 走看看