Skip to content

事务

原子一致隔离持久

事务传播

  1. 什么是:是指在一个方法调用另一个方法时,事务如何传播或传递的规则。Spring 的事务传播机制用于控制多个事务方法之间的事务边界,以确保事务的一致性和可靠性
  2. 哪些传播方式
    1. REQUIRED(默认):如果当前存在事务,则加入当前事务;如果没有事务,则创建一个新的事务。这是最常见的传播行为,保证方法运行在一个事务内。
    2. SUPPORTS:如果当前存在事务,则加入当前事务;如果没有事务,则以非事务方式执行。这种传播行为适用于不需要事务支持的方法。
    3. MANDATORY:如果当前存在事务,则加入当前事务;如果没有事务,则抛出异常。该传播行为要求调用方法必须在事务中运行。
    4. REQUIRES_NEW:无论当前是否存在事务,都创建一个新的事务。如果当前存在事务,会挂起当前事务,并在方法执行完毕后,继续原来的事务。
    5. NOT_SUPPORTED:以非事务方式运行方法,如果当前存在事务,则挂起当前事务,直到方法执行完毕后恢复原来的事务。
    6. NEVER:以非事务方式运行方法,如果当前存在事务,则抛出异常。该传播行为要求调用方法必须不在事务中运行。
    7. NESTED:如果当前存在事务,则在当前事务的嵌套事务中运行;如果没有事务,则创建一个新的事务。嵌套事务是独立于外部事务的子事务,可以独立地进行提交或回滚。
  3. 注解方式修改方法事务的传播方式 @Transactional(propagation = Propagation.REQUIRED)

spring事务失效

  1. 数据库检索引擎不支持
  2. 不是public方法
  3. 没有被spring管理
  4. 异常被捕获没有抛出
  5. 事务传播中不以事务运行 not_supported(5)
  6. 调用同一个类中的方法,A 调用本类的B(加了注释)无论是public还是priviate / 因为是动态代理的所以只能外部类调用本类
  7. @Transactional注解属性rollbackfor设置有问题(spring默认unckeck(继承Runtimeexception)和error才会回滚。其余不会滚,可以通过设置rollbackfor属性使其他异常也回滚)

基于 VitePress 构建