Spring的事务传播
时间: 2024-04-28 18:24:40 浏览: 6
Spring的事务传播指的是在多个事务方法互相调用的情况下,如何管理这些事务的提交和回滚。Spring定义了7种事务传播行为,分别是:
1. REQUIRED:如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。
2. SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。
3. MANDATORY:强制必须存在当前的事务,如果不存在,则抛出异常。
4. REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起。
5. NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
6. NEVER:以非事务方式执行操作,如果当前存在事务,则抛出异常。
7. NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则新建一个事务。嵌套事务是独立提交或回滚的,它不受外部事务的影响,但是它的提交需要等到外部事务提交后才会生效,而它的回滚不会影响外部事务。
相关问题
spring事务传播
Spring事务传播是指在多个具有事务控制的service相互调用时所形成的复杂事务边界控制。Spring提供了七种事务传播行为,分别是:
1. REQUIRED(默认):表示当前方法必须在一个具有事务的上下文中运行,如果客户端有事务在进行,那么被调用端将在该事务中运行,否则重新开启一个事务。如果被调用端发生异常,调用端和被调用端事务都将回滚。
2. SUPPORTS:表示当前方法可以在一个具有事务的上下文中运行,也可以在没有事务的上下文中运行。
3. MANDATORY:表示当前方法必须在一个具有事务的上下文中运行,如果没有事务则抛出异常。
4. REQUIRES_NEW:表示当前方法必须运行在它自己的事务中。一个新的事务将启动,如果有现有的事务在运行,则该方法被挂起,直到新的事务提交或回滚才恢复执行。
5. NOT_SUPPORTED:表示当前方法不应该运行在一个事务中,如果有事务在运行,则将该事务挂起,直到方法执行完毕。
6. NEVER:表示当前方法不应该运行在一个事务中,如果有事务在运行,则抛出异常。
7. NESTED:表示如果当前方法正有一个事务在运行中,则该方法应该运行在一个嵌套事务中。被嵌套的事务可以独立于封装事务进行提交或回滚。如果封装事务存在,并且外层事务回滚,那么内层事务必须回滚,反之,内层事务不影响外层事务。如果封装事务不存在,则与REQUIRED相同。
这些事务传播行为可以根据具体的业务需求来选择,以实现正确的事务控制。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
Transactional spring 事务传播
Transactional spring事务传播是指在Spring框架中,对于多个事务方法的调用,如何处理事务的传播行为。事务传播定义了一个事务方法如何与其他事务方法进行交互和协调的规则。
Spring框架提供了多种事务传播行为,包括:
1. REQUIRED(默认):如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。这是最常用的传播行为,适用于大多数情况。
2. SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务方式执行。适用于不需要强制要求事务的场景。
3. MANDATORY:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。适用于必须在已有事务中执行的场景。
4. REQUIRES_NEW:创建一个新的事务,并挂起当前事务(如果存在)。适用于需要独立的事务执行的场景。
5. NOT_SUPPORTED:以非事务方式执行,并挂起当前事务(如果存在)。适用于不需要事务支持的场景。
6. NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。适用于不允许在事务中执行的场景。
7. NESTED:如果当前存在事务,则在嵌套事务中执行;如果当前没有事务,则创建一个新的事务。嵌套事务是外部事务的一部分,可以独立提交或回滚。适用于需要嵌套事务支持的场景。