@Transactional(propagation)
时间: 2023-10-12 12:04:14 浏览: 75
@transactional(propagation = propagation.required) 表示在方法执行时开启一个事务,如果当前已经存在一个事务,则加入该事务中,如果不存在事务,则创建一个新的事务。这个注解通常用于需要保证数据一致性的业务方法中,确保在方法执行过程中,如果出现异常或错误,可以回滚事务,保证数据的完整性。
相关问题
@Transactional Propagation
@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]
@transactional propagation
@transactional propagation 是指事务传播行为。在使用 Spring 框架进行事务管理时,当一个方法被标记为 @transactional 时,该方法执行时会创建一个新的事务。事务传播行为指的是该事务对于调用该方法的上一层方法是否会开启一个新事务或者加入当前事务中。可以通过设置 propagation 属性来控制该行为。常见的 propagation 属性选项包括 REQUIRED、REQUIRES_NEW、SUPPORTS、NESTED 等,分别代表在当前事务存在时,支持当前事务;总是开启新事务;没有事务时以非事务方式执行;在当前事务存在时,嵌套执行子事务,如果当前事务失败则回滚子事务,子事务如果失败并不会影响当前事务。
阅读全文