@Transactional 的传播行为是什么
时间: 2023-10-25 15:39:57 浏览: 61
@Transactional 是 Spring 框架中用于事务处理的注解。它的传播行为用于定义事务的传播规则,即当一个事务方法调用另一个事务方法时,被调用方法如何处理事务。
@Transactional 有以下传播行为:
- REQUIRED: 如果当前存在事务,则加入该事务,否则新建一个事务并加入。
- SUPPORTS: 如果当前存在事务,则加入该事务,否则以非事务方式执行。
- MANDATORY: 当前必须存在事务,否则抛出异常。
- REQUIRES_NEW: 新建一个事务,并在它自己的事务内执行。
- NOT_SUPPORTED: 以非事务方式执行,并挂起任何当前存在的事务。
- NEVER: 以非事务方式执行,如果当前存在事务,则抛出异常。
- NESTED: 如果当前存在事务,则在嵌套事务内执行,否则新建一个事务并加入。
其中,REQUIRED 是最常用的传播行为。
相关问题
@Transactional 的传播行为
@Transactional 是一个在 Spring 框架中常用的注解,用于控制事务的传播行为。事务的传播行为指的是当一个方法被另一个方法调用时,事务应该如何传播到被调用的方法中。
@Transactional 注解可以应用在类级别或方法级别。当应用在方法级别时,它会覆盖类级别的注解。
@Transactional 注解有以下几种传播行为选项:
1. REQUIRED(默认):如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。这是最常用的传播行为选项。
2. SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式执行。
3. MANDATORY:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。
4. REQUIRES_NEW:创建一个新的事务,并挂起当前事务(如果存在)。
5. NOT_SUPPORTED:以非事务的方式执行操作,如果当前存在事务,则挂起该事务。
6. NEVER:以非事务的方式执行操作,如果当前存在事务,则抛出异常。
7. NESTED:如果当前存在事务,则在嵌套事务中执行;如果当前没有事务,则创建一个新的事务。嵌套事务是被嵌套在外部事务中的内部事务,它们可以独立地进行提交或回滚。
通过 @Transactional 注解,我们可以灵活地控制事务的传播行为,以满足不同业务场景的需求。
@transactional传播级别
@transactional传播级别是指在使用Spring的@Transactional注解时,指定事务的传播行为。Spring支持多种传播级别,包括REQUIRED、REQUIRES_NEW、NESTED、SUPPORTS、MANDATORY、NOT_SUPPORTED和NEVER。其中NESTED表示如果当前已经存在一个事务,那么该方法将会在嵌套事务中运行。嵌套的事务可以独立于当前事务进行单独地提交或回滚。如果当前事务不存在,那么其行为与REQUIRED一样。而NOT_SUPPORTED表示该方法不应该运行在事务中,如果存在当前事务,在该方法运行期间,当前事务将被挂起。
阅读全文