spring - transaction - 事务抽象

2021-06-07 15:04

阅读:530

标签:方法   comm   提交   ext   into   poi   except   cte   查看   

??Spring事务抽象 - 简介

??Spring事务抽象 - 模型

Spring提供了统一的事务抽象,可以让我们以统一的Api进行事务管理具体的操作交给不同的TransitionManager实现完成。
技术图片

?? Spring事务抽象 - 接口介绍

PlatformTransactionManager - 根据TransitionDefinition创建事务、事务回滚、事务提交

  • getTransaction() - 开启事务
  • commit() - 提交事务
  • rollback() - 回滚事务

TransitionDefinition - 定义事务特征,比如传播机制隔离界别readonlytimeout遇到什么异常回滚
TransactionStatus - 保存事务状态

Propagation - 传播行为,一般查询方法使用SUPPORTS,更新、插入、删除方法使用REQUIRED

Isolation - 隔离级别

TransitionTemplate - 用于编程式事务(用法类似JdbcTemplate)

TransitionCallback/TransactionCallbackWithoutResult- 给TransationTemplate提供回调

?? 声明式事务 - 注解方式

1??配置TransactionManager(事务管理器)


2??开启@Transaction注解支持


3?? 使用@Tranaction注解?

/*
* 使用事务 - @Transitional
* */
@Transactional
public void insert() {
    // 1. 插入数据
    int update = jdbcTemplate.update("insert into tb_area value (null,‘东校区‘)");
    // 2. 抛出异常
    throw new RuntimeException("出现了错误");
    // 3. 查看是否回滚
}

?? 声明式事务 - XML方式

1?? 配置TransactionManager

 

2?? 使用定义事务切面


3??把?事务切面织入到target

 

    
    

?? 编程式事务

有两种方式

  • 直接使用TransactionManager - 自己控制事务,自己决定什么时候rollbackcommit
  • 使用TransactionTemplate - 只用提供回调,方法抛RuntimeException回滚

?? 使用TranactionManager

/*
* 使用事务 - 
* DefaultTransactionDefinition - 定义事务特征,比如propagation、isolation
* TransactionManager - 事务管理
* */
public void useTxManager() {
  // 1. 初始化TransitionDefinition -
     DefaultTransactionDefinition transitionDefinition = new DefaultTransactionDefinition();
     transitionDefinition.setPropagationBehavior(Propagation.REQUIRED.value());
     // 2. 开启事务
     TransactionStatus transactionStatus = transactionManager.getTransaction(transitionDefinition);
     try {
        // 1. 插入数据
        int update = jdbcTemplate.update("insert into tb_area value (null,‘东校区‘)");
        // 2. 抛出异常
        if(update == 1) {
            throw new RuntimeException("出现了错误");
        }
        transactionManager.commit(transactionStatus);
    }catch (Exception e) {
         e.printStackTrace();
         transactionManager.rollback(transactionStatus);
    }
 }

?? 使用TransactionTemplate

1??配置TransactionTemplate

 

使用TranactionTemplate,并使用TransactionCallback提供回调

/*
* 使用事务 - 
* TransitionTemplate - 类似JdbcTemplate,内部视同TransactionManager进行事务操作
* TransitionCallabck、TransactionCallbackWithoutResult - 提供回调
* */
public void useTxTemplate() {
    transactionTemplate.execute(new TransactionCallback() {
        public Object doInTransaction(TransactionStatus transactionStatus) {
            int update = jdbcTemplate.update("insert into tb_area value (null,‘东校区‘)");
            // 2. 抛出异常
            if(update == 1) {
                throw new RuntimeException("出现了错误");
            }
            // 3. 返回值
            return update;
        }
    });
}

spring - transaction - 事务抽象

标签:方法   comm   提交   ext   into   poi   except   cte   查看   

原文地址:https://www.cnblogs.com/yuki2333/p/14584242.html


评论


亲,登录后才可以留言!