spring事物传播机制有哪些
-
Spring事务传播机制是用于控制多个事务之间的关系和行为的机制。下面列举了几种常用的Spring事务传播机制:
-
PROPAGATION_REQUIRED(默认):如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。这是最常用的传播机制,适用于大多数的情况。
-
PROPAGATION_REQUIRES_NEW:创建一个新的事务,并挂起当前的事务。这个传播机制适用于需要独立事务的情况,例如,当某个方法需要以全新的事务逻辑进行处理,而不受调用方事务的影响时。
-
PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务中执行;如果当前没有事务,则创建一个新的事务。嵌套事务是作为外部事务的一部分,可以选择性地进行回滚,而不影响外部事务的提交或回滚。这种传播机制适用于需要创建一个嵌套事务来保存一部分独立的业务逻辑的情况。
-
PROPAGATION_SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务方式执行。这种传播机制适用于一些只读操作,不需要进行事务管理的情况。
-
PROPAGATION_NOT_SUPPORTED:以非事务方式执行,并挂起当前的事务(如果存在)。这种传播机制适用于一些不需要事务管理的独立操作,例如,查询操作或者不希望被当前事务影响的操作。
-
PROPAGATION_MANDATORY:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。这种传播机制适用于一些需要强制执行事务的情况,如果没有事务,则不允许执行。
除了上述列出的传播机制外,Spring还提供了一些其他的传播机制,例如PROPAGATION_NEVER(以非事务方式执行,如果当前存在事务,则抛出异常)和PROPAGATION_ALWAYS(无论当前是否存在事务,总是创建一个新的事务)等,根据实际需求选择合适的传播机制可以更好地控制事务的行为和关系。
1年前 -
-
Spring事务传播机制主要有以下几种:
- REQUIRED:如果当前存在事务,则加入事务;如果当前没有事务,则创建一个新的事务。这是默认的事务传播行为。
- SUPPORTS:如果当前存在事务,则加入事务;如果当前没有事务,则以非事务的方式执行。
- MANDATORY:如果当前存在事务,则加入事务;如果当前没有事务,则抛出异常。
- REQUIRES_NEW:创建一个新的事务,并且暂停当前事务(如果存在)。
- NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,则挂起事务。
- NEVER:以非事务方式执行操作,如果当前存在事务,则抛出异常。
- NESTED:如果当前存在事务,则在嵌套事务内执行;如果当前没有事务,则创建一个新的事务。
需要注意的是,事务的传播机制只对具有事务注解或事务控制的方法起作用。
在实际使用中,我们需要根据具体的业务需求选择适合的事务传播机制。例如,如果我们希望多个方法在同一事务内执行,可以选择REQUIRED传播机制;如果我们希望在一个方法中创建一个独立的事务,可以选择REQUIRES_NEW传播机制。同时,需要注意事务的传播机制可能会影响事务的隔离级别和并发性能。
1年前 -
Spring框架中的事务传播机制主要有以下几种:
-
REQUIRED:如果当前存在事务,则加入到当前事务中;如果当前没有事务,则创建一个新的事务。该传播机制是Spring默认的传播级别。
-
SUPPORTS:如果当前存在事务,则加入到当前事务中;如果当前没有事务,则以非事务的方式执行。
-
MANDATORY:如果当前存在事务,则加入到当前事务中;如果当前没有事务,则抛出异常。
-
REQUIRES_NEW:无论当前是否存在事务,都创建一个新的事务。如果当前存在事务,则将当前事务挂起。
-
NOT_SUPPORTED:以非事务的方式执行操作。如果当前存在事务,则将当前事务挂起。
-
NEVER:以非事务的方式执行操作。如果当前存在事务,则抛出异常。
-
NESTED:如果当前存在事务,则在嵌套事务中执行;如果当前没有事务,则创建一个新的事务。嵌套事务是独立于外部事务的,可以回滚或提交。
以上是Spring中常用的事务传播机制,通过指定不同的传播机制可以灵活地控制事务的行为。在使用事务传播机制时,可以在@Service或@Repository注解中的@Transactional属性中设置传播机制。例如:
@Service @Transactional(propagation = Propagation.REQUIRED) public class UserServiceImpl implements UserService { //... }在上述示例中,将使用REQUIRED传播机制,即如果当前存在事务,则加入到当前事务中;如果当前没有事务,则创建一个新的事务。
1年前 -