Spring Aop事务管理是什么

发布时间:2021-07-08 17:58:31 作者:chen
来源:亿速云 阅读:140

本篇内容主要讲解“Spring Aop事务管理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring Aop事务管理是什么”吧!

/**
     * 外层方法没有配置事务,验证调用同类方法时的场景:
     * 1、方法B配置事务、执行数据库操作后抛出异常,数据不会回滚:因为方法内调用事务没生效
     * 2、同上,通过代理对象访问,事务回滚
*/
    public void pureA_tranB_throw() {
        // 没有事务,事务正常提交
        db1Op();

        // 1、不会回滚,因为方法内调用事务没生效
        //traB_throw();

        // 2、通过代理对象,事务会回滚
        C1Services c1Services = (C1Services) AopContext.currentProxy();
        c1Services.traB_throw();

        throw new RuntimeException("test rollback");
    }
    
    @Transactional(rollbackFor = RuntimeException.class, value = "db1transactionManager")
    public void traB_throw() {
        db1Op();
        throw new RuntimeException("test rollback");
    }
    
    /**
     * 外层方法配置事务,验证调用同类方法时的场景:
     * 1、方法B配置事务、执行数据库操作后抛出异常,虽然B方法未启用事务的增强,但和外层事务属于同一个事务管理器,数据会回滚
     */
    @Transactional(rollbackFor = RuntimeException.class, value = "db1transactionManager")
    public void traA_traB_throw() {
        // 有外层事务,事务会回滚
        db1Op();

        // 1、会回滚,因为虽然方法B的事务没失效,但是外层属于同一个事务管理器,因此外层事务会控制其回滚
        traB_throw();

        throw new RuntimeException("test rollback");
    }

 /**
     * 外层方法配置事务,验证不同数据库操作的场景:
     * 1、不会回滚,B2方法的事务增强未生效,且B2和外层方法不是一个事务管理器,所以不会受外层事务影响
     * 2、会回滚,B2方法的事务增强生效,执行异常,事务回滚
     */
    @Transactional(rollbackFor = RuntimeException.class, value = "db1transactionManager")
    public void traA_traB2_throw() {
        // 有事务,事务会回滚
        db1Op();

        ///1、不会回滚,事务增强没生效
        //traB2_throw();

        // 通过代理对象,事务会回滚
        C1Services c1Services = (C1Services) AopContext.currentProxy();
        c1Services.traB2_throw();

        throw new RuntimeException("test rollback");
    }

    @Transactional(rollbackFor = RuntimeException.class, value = "db2transactionManager")
    public void traB2_throw() {
        db2();
        throw new RuntimeException("test rollback");
    }
 

REQUIRED    支持当前事务,如果当前事务不存在,则创建新事务。是spring事务管理的默认隔离级别
SUPPORTS    支持当前事务,如果当前事务不存在,则按照无事务运行
MANDATORY    支持当前事务,如果当前事务不存在,则抛出异常
REQUIRES_NEW    创建一个新事务,如果当前事务存在,则挂起当前事务
NOT_SUPPORTED    按照无事务运行,如果当前事务存在,则挂起当前事务
NEVER            按照无事务运行,如果当前事务存在,则抛出异常
NESTED        如果当前事务存在,则按照嵌套事务的方式执行,在特别的事务管理器上才会创建嵌套事务,一些JTA的提供者支持嵌套事务管理器

到此,相信大家对“Spring Aop事务管理是什么”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

推荐阅读:
  1. Spring基于XML方式配置事务
  2. Spring事务是什么

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

spring

上一篇:NacosDiscoveryClient的使用方法

下一篇:kafka启动错误 broker.id 0 doesn't match stored broker.id 1 in meta.properties怎么解决

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》