什么是事务传播行为?
事务的传播行为是在事务之间出现包含或嵌套是才会用到。
Spring
中有七种事务的传播行为:
PROPAGATION_REQUIRED
它是默认传播行为。如果不存在外层事务,就创建新事务;否则使用外层事务。
PROPAGATION_SUPPORTS
支持事务。如果存在外层事务,就沿用当前事务;否则采用无事务的方式运行内部方法。
PROPAGATION_MANDATORY
必须使用事务。如果不存在外层事务,就抛出异常;否则使用外层事务。
PROPAGATION_REQUIRES_NEW
无论外层事务是否存在,都会创建新事务运行内部方法,与外层事务相互独立。
PROPAGATION_NOT_SUPPORTED
不支持事务。如果存在外层事务,将挂起事务对于内部方法。
PROPAGATION_NEVER
不支持事务。如果存在外层事务,则抛出异常,否则继续使用无事务机制运行。
PROPAGATION_NESTED
在当前方法调用内部方法时,如果内部方法发生异常,只回滚内部方法执行过的
SQL
,而不回滚当前方法的事务。
配置事务传播行为
- 使用
org.springframework.transaction.annotation
包下的@Transactional
注解,并声明propagation
属性即可(默认值为Propagation.REQUIRED
)
@Transactional(propagation = Propagation.REQUIRED)
- 事务传播行为是作用于内层方法上。