spring中事物传播属性有哪些
-
spring中事物传播属性主要有以下几种:
-
REQUIRED(默认):如果当前存在事务,则加入事务,如果没有事务,则新建一个事务。该传播属性保证了被调用方法在一个事务内执行,同时可以多次调用,每次调用都在同一个事务中。
-
SUPPORTS:支持当前事务,如果当前存在事务,则加入事务,如果没有事务,则以非事务方式执行。该传播属性允许被调用方法在有事务的上下文中执行,也允许在无事务的上下文中执行。
-
REQUIRES_NEW:挂起当前事务,创建一个新事务执行被调用方法。即使当前存在事务,也创建一个新的事务执行被调用方法,调用方法的事务被挂起并保持独立。
-
NOT_SUPPORTED:以非事务方式执行,如果当前存在事务,则将事务挂起。该传播属性将被调用方法的执行从事务中分离出来,以非事务方式执行。
-
NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。该传播属性被调用方法的执行不能在事务中执行,如果存在事务,则抛出异常。
-
MANDATORY:支持当前事务,如果当前不存在事务,则抛出异常。该传播属性要求被调用方法必须在一个事务中执行,如果没有事务,则抛出异常。
-
NESTED:如果当前事务存在,则在嵌套事务内执行被调用方法;如果当前不存在事务,则执行与REQUIRED传播属性相同的操作。该传播属性允许在调用方法的事务中创建一个嵌套事务,并与外部事务联动,如果外部事务提交,则嵌套事务也会提交;如果外部事务回滚,则嵌套事务也会回滚。
这些事务传播属性可以通过在方法上使用
@Transactional注解来设置,也可以通过在配置文件中进行全局设置。在使用事务时,我们可以根据业务需求选择合适的事务传播属性,来控制事务的行为。1年前 -
-
在Spring框架中,事务的传播属性用于定义一个方法执行时,当前事务如何与其他事务进行交互。Spring提供了多种事务传播属性,使得开发人员可以根据需要进行选择。下面是Spring中常用的事务传播属性:
-
REQUIRED(默认值):如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。该传播属性适用于大多数情况,通常用于核心业务逻辑。
-
SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则不开启新事务。该传播属性适用于一些非核心业务逻辑,对事务没有强制要求的方法。
-
MANDATORY:必须存在一个当前的事务,如果没有事务,则抛出异常。该传播属性适用于一些必须要在事务中执行的方法,如果没有事务,则直接抛出异常。
-
REQUIRES_NEW:无论当前是否存在事务,都会创建一个新的事务。如果当前存在事务,则将当前事务挂起。该传播属性适用于需要独立事务执行的方法,不受外部事务的影响。
-
NOT_SUPPORTED:如果当前存在事务,则挂起该事务,以非事务方式执行方法。该传播属性适用于一些独立操作,不需要事务支持的方法。
需要注意的是,事务传播属性仅对带有@Transactional注解的方法起作用。在Spring中,可以通过在方法上添加@Transactional注解来指定事务的传播属性。同时,事务传播属性还可以通过编程方式进行设置。
1年前 -
-
在Spring框架中,事务传播属性可以用来定义在一个事务方法(即被@Transactional注解标记的方法)被嵌套地调用时,当前事务如何在这个方法之间传播。Spring框架为事务传播属性定义了多个选项,每个选项对应不同的传播行为。下面是Spring框架中定义的事务传播属性:
-
PROPAGATION_REQUIRED(默认):如果当前存在事务,则加入该事务;如果没有事务,则创建一个新的事务。这是最常用的传播属性,也被称为“传播必需的”。
-
PROPAGATION_SUPPORTS:如果当前存在事务,则加入该事务;如果没有事务,则以非事务的方式执行。这种传播属性适用于不需要强制要求事务的场景。
-
PROPAGATION_MANDATORY:如果当前存在事务,则加入该事务;如果没有事务,则抛出异常。这种传播属性适用于需要强制要求事务的场景。
-
PROPAGATION_REQUIRES_NEW:创建一个新的事务,如果当前存在事务,则把当前事务挂起。这种传播属性适用于希望在方法中使用独立的事务的场景。
-
PROPAGATION_NOT_SUPPORTED:以非事务的方式执行操作,如果当前存在事务,则把当前事务挂起。这种传播属性适用于不希望在方法中使用事务的场景。
-
PROPAGATION_NEVER:以非事务的方式执行操作,如果当前存在事务,则抛出异常。这种传播属性适用于绝对不允许在方法中使用事务的场景。
-
PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行;如果当前没有事务,则创建一个新的事务。嵌套事务是一个独立的事务,它的提交和回滚不会影响外部事务。这种传播属性适用于需要在方法中嵌套使用事务的场景。
以上是Spring框架中定义的事务传播属性,开发者可以根据具体的业务需求选择合适的传播属性来管理事务的传播行为。
1年前 -