spring传播机制有什么
-
Spring框架的传播机制主要包括事务的传播行为和异常的传播行为。
在事务的传播行为方面,Spring提供了多种传播行为供开发者选择,包括:
- REQUIRED:如果当前存在事务,则加入该事务,如果当前没有事务,则创建一个新的事务。这是最常用的传播行为,也是默认的传播行为。
- SUPPORTS:如果当前存在事务,则加入该事务,如果当前没有事务,则以非事务的方式执行。
- MANDATORY:如果当前存在事务,则加入该事务,如果当前没有事务,则抛出异常。
- REQUIRES_NEW:创建一个新的事务,如果当前存在事务,则将当前事务挂起。
- NOT_SUPPORTED:以非事务的方式执行,如果当前存在事务,则将当前事务挂起。
- NEVER:以非事务的方式执行,如果当前存在事务,则抛出异常。
- NESTED:如果当前存在事务,则在当前事务的嵌套事务中执行,如果当前没有事务,则创建一个新的事务。这是一个嵌套事务,它是基于保存点(Savepoint)的,可以回滚部分操作。
在异常的传播行为方面,Spring提供了两种方式:默认情况下,Spring只会对RuntimeException及其子类进行事务回滚,对于Checked Exception,Spring不会触发事务回滚;开发者也可以通过设置rollbackFor属性来手动指定需要回滚的异常类型。
以上就是Spring框架中的传播机制,通过设置不同的传播行为和异常传播行为,可以灵活地控制事务的行为。
1年前 -
Spring的传播机制是指在方法调用期间,事务如何在不同的方法之间传播和管理。Spring提供了多种传播机制,以满足不同的业务需求。
-
REQUIRED传播机制:默认的传播机制。如果当前存在事务,就加入当前事务;如果当前没有事务,就创建一个新事务。适合大多数的业务场景,确保方法总是在一个事务中执行。
-
SUPPORTS传播机制:如果当前存在事务,就加入当前事务;如果当前没有事务,就以非事务方式执行。适用于不需要事务支持的方法,可以在有事务的环境中执行,也可以在没有事务的环境中执行。
-
MANDATORY传播机制:必须在一个事务中执行,如果当前没有事务,则抛出异常。适用于需要在事务中执行的方法,如果当前没有事务,则抛出异常。
-
REQUIRES_NEW传播机制:总是创建一个新的事务,如果当前存在事务,则将当前事务挂起。适用于需要独立的事务的方法,可以在一个独立的事务中执行,不受外部事务的影响。
-
NOT_SUPPORTED传播机制:以非事务方式执行方法,如果当前存在事务,则将当前事务挂起。适用于不需要事务支持的方法,可以在没有事务的环境中执行,不受外部事务的影响。
除了以上几种传播机制,Spring还提供了NEVER传播机制和NESTED传播机制。
NEVER传播机制:必须以非事务方式执行,如果当前存在事务,则抛出异常。
NESTED传播机制:如果当前存在事务,则在嵌套事务中执行;如果当前没有事务,则创建一个新事务。嵌套事务是父事务的一部分,并且可以独立提交或回滚。如果父事务回滚,则嵌套事务也会回滚,但如果嵌套事务回滚,则不会影响父事务的提交。适用于需要独立提交或回滚的方法。
通过合理选择传播机制,可以确保事务的正确处理,提高系统的可靠性和性能。在实际应用中,需要根据具体业务需求选择合适的传播机制。
1年前 -
-
Spring的传播机制是指在事务管理中,如果一个方法调用了另一个方法,并且这两个方法都被事务管理器管理,则需要确定事务应该如何在这两个方法之间传播。Spring提供了多种传播机制来满足不同的业务需求。
Spring的传播机制包括以下几种:
-
REQUIRED:如果当前存在事务,则加入该事务,如果不存在事务,则创建一个新的事务。这是默认的传播机制。当方法A调用方法B时,如果方法B存在事务,则方法A和方法B共享同一个事务,如果方法B不存在事务,则为方法B创建一个新的事务。
-
SUPPORTS:如果当前存在事务,则加入该事务,如果不存在事务,则以非事务的方式运行。当方法A调用方法B时,如果方法B存在事务,则方法A和方法B共享同一个事务,如果方法B不存在事务,则以非事务的方式运行。
-
MANDATORY:如果当前存在事务,则加入该事务,如果不存在事务,则抛出异常。当方法A调用方法B时,要求方法B必须在一个事务内部被调用,如果方法A没有事务,则抛出异常。
-
REQUIRES_NEW:如果当前存在事务,则挂起该事务,并创建一个新的事务,如果不存在事务,则创建一个新的事务。当方法A调用方法B时,无论方法A是否存在事务,方法B都会创建一个新的事务,方法B的事务和方法A的事务是相互独立的。
-
NOT_SUPPORTED:以非事务的方式运行,并挂起当前事务(如果存在)。当方法A调用方法B时,无论方法A是否存在事务,方法B都会以非事务方式运行,并挂起方法A的事务。
-
NEVER:以非事务的方式运行,如果当前存在事务,则抛出异常。当方法A调用方法B时,要求方法B不能在事务内部被调用,如果方法A存在事务,则抛出异常。
-
NESTED:如果当前存在事务,则在一个嵌套事务中执行,如果不存在事务,则创建一个新的事务。方法B的事务是方法A事务的子事务,方法B的事务可以独立于方法A的事务进行提交或回滚。如果方法A的事务回滚,则方法B的事务也会被回滚;如果方法B的事务回滚,则只会回滚方法B的事务,不影响方法A的事务。
这些传播机制可以在@Transactional注解或XML配置文件中定义。通过选择合适的传播机制,可以实现对事务的精确控制,保证数据的一致性和可靠性。
1年前 -