Spring 默认事务传播方式
时间: 2023-07-19 21:57:52 浏览: 95
Spring 默认的事务传播方式为PROPAGATION_REQUIRED,即当前方法必须在一个事务中运行,如果当前存在一个事务,则加入该事务;否则,创建一个新的事务。如果外层已经存在事务,则加入已经存在的事务中。这是Spring事务传播机制中最常用的一种。除此之外,Spring还提供了其他的事务传播方式,例如PROPAGATION_REQUIRES_NEW、PROPAGATION_SUPPORTS、PROPAGATION_NOT_SUPPORTED、PROPAGATION_NEVER、PROPAGATION_MANDATORY、PROPAGATION_NESTED。每种事务传播方式都有其适用的场景,需要根据业务需求进行选择。
相关问题
spring 事务传播方式
Spring 事务传播方式是指在多个事务方法之间传播事务上下文的方式。
Spring 支持以下 7 种事务传播方式:
- `PROPAGATION_REQUIRED`: 如果当前存在事务,则加入该事务;如果当前没有事务,则新建一个事务。这是最常见的传播方式,也是默认传播方式。
- `PROPAGATION_REQUIRES_NEW`: 新建一个事务,如果当前存在事务,则挂起当前事务。
- `PROPAGATION_SUPPORTS`: 如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务方式执行。
- `PROPAGATION_MANDATORY`: 如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。
- `PROPAGATION_NOT_SUPPORTED`: 以非事务方式执行操作,如果当前存在事务,则挂起当前事务。
- `PROPAGATION_NEVER`: 以非事务方式执行,如果当前存在事务,则抛出异常。
- `PROPAGATION_NESTED`: 如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该传播方式等价于 `PROPAGATION_REQUIRED`。
你可以在 Spring 的事务配置中使用 `propagation` 属性来指定
spring事务传播方式
Spring事务传播方式是指在一个service方法调用另一个service方法时,事务如何进行传播。Spring的默认事务传播方式是PROPAGATION_REQUIRED。这意味着如果当前存在一个事务(比如其他有事务的service方法调用此方法),则该方法将运行在当前事务中,否则将开启一个新的事务。
需要注意的是,调用methodB的方法必须使用Spring的代理方式,即用testService.methodB()方式调用,如果只是普通方法调用(比如this.methodB()),事务将不会起作用。同时,可以使用@Transactional注解来标注需要进行事务管理的方法。
在一些特殊情况下,可以使用其他的事务传播方式。例如,当methodA调用methodB时,当前事务会被挂起,然后在methodB中会开启一个新的事务。methodB执行完并且事务提交后,methodA的事务继续执行。这种情况下,可以在methodB上使用@Transactional(propagation = Propagation.REQUIRES_NEW)来设置事务的传播方式。
总结起来,Spring提供了多种事务传播方式,根据具体需求可以选择合适的方式来管理事务。默认的传播方式是PROPAGATION_REQUIRED,即如果当前存在一个事务,则在该事务中运行,否则开启一个新的事务。同时,需要使用Spring的代理方式调用有事务管理的方法才能确保事务的正确运行。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
阅读全文