当前位置:   article > 正文

spring 中实现事务的几种方式_spring 事务实现方式有哪些?

spring 事务实现方式有哪些?

一、声明式事务

通过Service 层方法上添加 Spring 的 @Transactional 注解来完成

常用配置

参 数 名 称功 能 描 述
readOnly该属性用于设置当前事务是否为只读事务,设置为true表示只读,false则表示可读写,默认值为false。例如:@Transactional(readOnly=true)
rollbackFor

该属性用于设置需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,则进行事务回滚。例如:指定单一异常类:@Transactional(rollbackFor=RuntimeException.class)指定多个异常类:@Transactional(rollbackFor={RuntimeException.class, Exception.class})

rollbackForClassName

该属性用于设置需要进行回滚的异常类名称数组,当方法中抛出指定异常名称数组中的异常时,则进行事务回滚。例如:指定单一异常类名称@Transactional(rollbackForClassName=”RuntimeException”)指定多个异常类名称:@Transactional(rollbackForClassName={“RuntimeException”,”Exception”})

noRollbackFor该属性用于设置不需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,不进行事务回滚。例如:指定单一异常类:@Transactional(noRollbackFor=RuntimeException.class)指定多个异常类:@Transactional(noRollbackFor={RuntimeException.class, Exception.class})
noRollbackForClassName该属性用于设置不需要进行回滚的异常类名称数组,当方法中抛出指定异常名称数组中的异常时,不进行事务回滚。例如:指定单一异常类名称:@Transactional(noRollbackForClassName=”RuntimeException”)指定多个异常类名称:@Transactional(noRollbackForClassName={“RuntimeException”,”Exception”})
propagation该属性用于设置事务的传播行为。例如:@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)
isolation该属性用于设置底层数据库的事务隔离级别,事务隔离级别用于处理多事务并发的情况,通常使用数据库的默认隔离级别即可,基本不需要进行设置
timeout该属性用于设置事务的超时秒数,默认值为-1表示永不超时



 

参考

实现事务三种方式(AOP + xml、AOP + @Aspect、@Transactional)

二、编程式事务

1、使用TransactionTemplate配置

  1. @Resource
  2. private TransactionTemplate transactionTemplate;
  3. public void test(){
  4. Object result = transactionTemplate.execute(e->{
  5. // 对应代码
  6. return result;
  7. });
  8. }
注:

1、TransactionTemplate的三个主要方法

        1> afterPropertiesSet  

        2> execute 任务执行(报错直接调rollbackOnException )

        3> rollbackOnException 回滚方法

2、TransactionTemplate的成员变量:

        transactionManager,对应PlatformTransactionManager事务控制器
        ——execute和rollbackOnException方法里的具体事务控制都是调用里PlatformTransactionManager里的接口方法

3、execute(...)执行事务管理的时候调用 参数TransactionCallback<T>中dolnTransaction方法,通过匿名内部类的方式在doInTransaction里重写需要进行事务控制的业务代码即可

4、TransactionTemplate .execute(...)执行事务管理的时候,传入的参数有两种选择:

      1.TransactionCallback

       2.TransactionCallbackWithoutResult

       前者有返回值,后者无返回值

参考:

TransactionTemplate编程式事务-CSDN博客

2、使用PlatformTransactionManager

  1. @Resource()
  2. PlatformTransactionManager transactionManager;
  3. public int insert(Product product,ProdutExt ext){
  4. TransactionStatus ts = transactionManager.getTransaction(new DefaultTransactionDefinition());
  5. try {
  6. //TODO 数据库操作
  7. transactionManager.commit(ts);
  8. }catch(Exception e){
  9. //异常时回滚
  10. transactionManager.rollback(ts);
  11. throw e;
  12. }
  13. }
注:

1、PlatformTransactionManager用于整个事务的创建、开启、提交、回滚操作;事务的定义由TransactionDefinition定义事务的隔离级别;TransactionStatus用于对新创建的事务进行管理。

2、PlatformTransactionManager的三个方法

       

  1. public interface PlatformTransactionManager extends TransactionManager {
  2. //1.创建一个事务并开启事务
  3. TransactionStatus getTransaction(@Nullable TransactionDefinition definition)
  4. throws TransactionException;
  5. //2.提交事务
  6. void commit(TransactionStatus status) throws TransactionException;
  7. //3.回滚事务
  8. void rollback(TransactionStatus status) throws TransactionException;
  9. }

3、PlatformTransactionManager中一些对象

  • TransactionDefinition : 事务的一些基础信息,如超时时间、隔离级别、传播属性等
  • TransactionStatus : 事务的一些状态信息,如是否是一个新的事务、是否已被标记为回滚

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/707737
推荐阅读
相关标签
  

闽ICP备14008679号