Spring 事务记录

一.事务不生效得场景

  1.访问权限问题 (只有public方法会生效)
  2.方法用final修饰,不会生效
  3.同一个类中的方法直接内部调用,会导致事务失效 (spring 事务是基于AOP 类实现的,默认类层的AOP)
  4.(类本身) 未被spring管理
  5.多线程调用
  6.(存储引擎)表不支持事务
  7.未开启事务
  8.错误的传播特性
  9.自己吞了异常
  10.手动抛了别的异常
  11.自定义了回滚异常
  12.嵌套事务回滚多了
  13.weblogic 部署未配置数据源(update 回滚正常,insert 回滚失败)

二、事务的隔离级别

  1,@Transactional(isolation = Isolation.READ_UNCOMMITTED) 读未提交;
  2,@Transactional(isolation = Isolation.READ_COMMITTED) 读已提交
  3,@Transactional(isolation = Isolation.SERIALIZABLE) 串行化 该隔离级别会把该方法所涉及到的表全部锁起来,共享锁,其他事务只能查,不能写;

三、事务传播行为

  1. TransactionDefinition.PROPAGATION_REQUIRED:
  如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。这是默认值。
  2. TransactionDefinition.PROPAGATION_REQUIRES_NEW:
  创建一个新的事务,如果当前存在事务,则把当前事务挂起。
  3. TransactionDefinition.PROPAGATION_SUPPORTS:
  如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。
  4. TransactionDefinition.PROPAGATION_NOT_SUPPORTED:
  以非事务方式运行,如果当前存在事务,则把当前事务挂起。
  5. TransactionDefinition.PROPAGATION_NEVER:
  以非事务方式运行,如果当前存在事务,则抛出异常。
  6. TransactionDefinition.PROPAGATION_MANDATORY:
  如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。
  7. TransactionDefinition.PROPAGATION_NESTED:
  如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;
  如果当前没有事务,则该取值等价于TransactionDefinition.PROPAGATION_REQUIRED。

posted @ 2022-07-05 17:03  笑对蓝天  阅读(45)  评论(0编辑  收藏  举报