事务
原子一致隔离持久
事务传播
- 什么是:是指在一个方法调用另一个方法时,事务如何传播或传递的规则。Spring 的事务传播机制用于控制多个事务方法之间的事务边界,以确保事务的一致性和可靠性
- 哪些传播方式
- REQUIRED(默认):如果当前存在事务,则加入当前事务;如果没有事务,则创建一个新的事务。这是最常见的传播行为,保证方法运行在一个事务内。
- SUPPORTS:如果当前存在事务,则加入当前事务;如果没有事务,则以非事务方式执行。这种传播行为适用于不需要事务支持的方法。
- MANDATORY:如果当前存在事务,则加入当前事务;如果没有事务,则抛出异常。该传播行为要求调用方法必须在事务中运行。
- REQUIRES_NEW:无论当前是否存在事务,都创建一个新的事务。如果当前存在事务,会挂起当前事务,并在方法执行完毕后,继续原来的事务。
- NOT_SUPPORTED:以非事务方式运行方法,如果当前存在事务,则挂起当前事务,直到方法执行完毕后恢复原来的事务。
- NEVER:以非事务方式运行方法,如果当前存在事务,则抛出异常。该传播行为要求调用方法必须不在事务中运行。
- NESTED:如果当前存在事务,则在当前事务的嵌套事务中运行;如果没有事务,则创建一个新的事务。嵌套事务是独立于外部事务的子事务,可以独立地进行提交或回滚。
- 注解方式修改方法事务的传播方式 @Transactional(propagation = Propagation.REQUIRED)
spring事务失效
- 数据库检索引擎不支持
- 不是public方法
- 没有被spring管理
- 异常被捕获没有抛出
- 事务传播中不以事务运行 not_supported(5)
- 调用同一个类中的方法,A 调用本类的B(加了注释)无论是public还是priviate / 因为是动态代理的所以只能外部类调用本类
- @Transactional注解属性rollbackfor设置有问题(spring默认unckeck(继承Runtimeexception)和error才会回滚。其余不会滚,可以通过设置rollbackfor属性使其他异常也回滚)
