• spring事务管理


    一、Spring事务管理相关三个高层抽象接口

    1. PlatformTransactionManager 平台相关事务管理器

    提供 commit 提交事务、 getTransaction 获取事务状态 、rollback 事务回滚

    不同持久层框架,需要不同事务管理器,来提供事务管理代码

    JDBC事务管理

           开启事务 connection.setAutoCommit(false)

           提交事务 connection.commit();

           回滚事务 connection.rollback();

    Hibernate事务管理

           开启事务 session.beginTransaction();

           提交事务 session.getTransaction().commit();

           回滚事务 session.getTransaction().rollback(); 

    2. TransactionDefinition 事务管理定义信息

    TransactionDefinition对象,对应在配置文件中,进行事务管理相关配置信息

    getIsolationLevel 获取事务隔离级别

    getPropagationBehavior 获取事务传播行为

    getTimeOut 获取超时时间

    isReadOnly 是否只读

    Spring 事务管理,进行配置包括(隔离级别、 传播行为、 超时时间、 是否只读

     

    什么是事务传播行为?

    事务传播行为用于解决2个被事务管理的方法相互调用问题。

    事务传播行为解决问题是,两个被事务管理方法互相调用,当一个方法出错时,另一个方法是否回滚

    REQUIRED(默认值)、SUPPORTS、MANDATORY : 同一个事务(删除用户、删除订单)

    REQUIRES_NEW、NOT_SUPPORTED、NEVER : 处于不同的事务 (ATM取款)

    NESTED 嵌套事务:只对DataSourceTransactionManager 有效 ,在同一个事务设置保存点,回滚到保存点,根据业务进行事务提交或者回滚

    3. TransactionStatus 事务管理状态信息

    flush 刷出、hasSavePoint 是否有保存点、isCompleted 事务是否完成、isNewTransaction 是否为新的事务、isRollbackOnly 事务事务回滚、 setRollbackOnly 事务设置为回滚

    小结:

           Spring要进行事务管理,使用PlatformTransactionManager 进行事务事务管理,如何管理? 根据TransactionDefinition 定义信息管理 , 在事务管理过程中通过TransactionStatus 查看事务的状态

    二、spring事务管理方式

    第一种: 编程式事务管理

           要手动编写事务管理代码,有代码侵入

    1)    在配置文件,配置事务管理器 TransactionManager

    2)    将TransactionManager 交给 TransactionTemplate

    3)    将TransactionTemplate 注入到代码

    transactionTemplate.execute(new TransactionCallbackWithoutResult(){

           Object doInTransaction(TransactionStatus status) {

                  // 需要事务管理的代码

    }

    });

    第二种: 声明式事务管理 (推荐)

           只需要通过配置,无需修改原来代码,添加事务管理功能 (底层 AOP 环绕通知)

    1)    配置TransationManager

    2)    将TransactionManager 交给 TransactionInterceptor 环绕通知

    3)    配置切入点和切面

    代码如下:

  • 相关阅读:
    Arduino mega 2560驱动安装失败(没有建立对验证码(TM)签名的目录的发布者信任)的解决方法
    Submile text3 安装使用技巧
    window.onload
    JS简单示例
    python类和对象的底层实现
    python类中方法加单下划线、双下划线、前后双下滑线的区别
    linux下json工具jq
    Django使用自定义的authentication登录认证
    django admin
    linux网卡桥接问题与docker网卡桥接问题
  • 原文地址:https://www.cnblogs.com/xumaodun/p/4932397.html
Copyright © 2020-2023  润新知