@Transactional Propagation
时间: 2023-08-17 22:15:16 浏览: 110
Spring @Transactional工作原理详解
@Transactional中的Propagation属性是用来定义事务的传播行为的。它决定了在一个方法调用另一个带有事务注解的方法时,事务是如何传播的。在Spring的事务管理中,@Transactional注解有多个Propagation属性值可供选择,包括MANDATORY、NEVER、NOT_SUPPORTED、REQUIRED、REQUIRES_NEW和SUPPORTS。每个属性值都有不同的行为表现。[1]
- Propagation.MANDATORY表示方法必须在一个已存在的事务中运行,否则会抛出异常。
- Propagation.NEVER表示方法不能在一个事务中运行,否则会抛出异常。
- Propagation.NOT_SUPPORTED表示方法不应该在一个事务中运行,如果当前存在事务,则暂停该事务直到方法执行完毕。
- Propagation.REQUIRED是默认值,表示方法必须在一个事务中运行,如果当前不存在事务,则创建一个新的事务。
- Propagation.REQUIRES_NEW表示方法必须在一个新的事务中运行,如果当前存在事务,则挂起该事务直到方法执行完毕。
- Propagation.SUPPORTS表示方法可以在一个事务中运行,如果当前存在事务,则在该事务中运行,否则可以不运行在事务中。[2]
事务的传播行为可以根据具体的业务需求来选择合适的Propagation属性值,以确保事务的一致性和隔离性。在Spring中,事务的处理是通过事务拦截器TransactionInterceptor来实现的,它在invoke方法中调用父类TransactionAspectSupport的invokeWithinTransaction方法来处理事务,包括事务的开启、提交和异常回滚等操作。[3]
阅读全文