zoukankan      html  css  js  c++  java
  • 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)    配置切入点和切面

    代码如下:

  • 相关阅读:
    luogu4182 [USACO18JAN] Lifeguards P (单调队列优化dp)
    bzoj3277 串 (后缀数组+二分答案+ST表)
    [模板]后缀数组
    bzoj4361 isn (dp+树状数组+容斥)
    luogu4187 [USACO18JAN]Stamp Painting (dp)
    [USACO15DEC]高低卡(白金)High Card Low Card (Platinum)
    USACO环绕岛屿Surround the Islands 并查集 枚举暴力
    5.7 ~ 5.12 刷题列表
    5.4 ~ 5.6 刷题记录
    HNOI2012 永无乡 无旋Treap
  • 原文地址:https://www.cnblogs.com/xumaodun/p/4932397.html
Copyright © 2011-2022 走看看