@transactional 传播机制
时间: 2023-10-06 18:13:01 浏览: 82
在Spring的@Transactional注解中,传播机制指的是多个事务方法相互调用时,事务如何在这些方法间传播的过程机制。根据引用和引用的描述,Spring中的@Transactional注解支持多种传播机制,其中包括Propagation.REQUIRED(默认)、Propagation.REQUIRES_NEW等。
具体来说,Propagation.REQUIRED表示若当前存在事务,则方法加入该事务中执行,若当前不存在事务,则创建新的事务。而Propagation.REQUIRES_NEW表示无论当前事务是否存在,都会创建一个新的事务,并将当前事务挂起。
因此,使用@Transactional注解时,通过设定不同的传播机制,可以实现对事务的灵活管理,根据业务需求确定事务的行为。
相关问题
@Transactional默认传播机制
@Transactional注解是Spring框架中用于管理事务的注解。它的默认传播机制是REQUIRED,即如果当前存在一个事务,则加入该事务中;如果当前没有事务,则新建一个事务。如果在方法中抛出了异常,则会回滚该事务。如果没有抛出异常,则会提交该事务。除了REQUIRED外,其他的传播机制还包括SUPPORTS、MANDATORY、REQUIRES_NEW、NOT_SUPPORTED和NEVER。每个传播机制对应不同的事务处理方式,可以根据具体的业务需求进行选择。
@Transactional 嵌套@Transactional
@Transactiona注解是Spring框架中用来实现事务管理的注解之一。它可以应用于方法或类级别,并用于标识希望被事务管理的方法或类。当一个方法被标记为@Transactional时,它将在方法执行期间启用事务机制。
关于嵌套@Transactional,引用提到了对子事务的定义和作用。在没有嵌套事务的情况下,如果一个方法A被标记为@Transactional,而方法A又调用了另一个被标记为@Transactional的方法B,那么方法B将会被包含在方法A的事务中。这种情况下,无法实现方法B独立提交或回滚。因此,如果我们想要实现方法B的独立事务控制,就需要使用嵌套@Transactional。
然而,嵌套事务并不是默认情况下就会生效的。实际上,Spring默认的事务传播行为是PROPAGATION_REQUIRED,它会将嵌套事务合并到外层事务中。这意味着,如果嵌套事务失败,整个事务将会回滚。
要使嵌套事务生效,可以通过修改事务传播行为来实现。例如,将内层方法的@Transactional注解的传播行为设置为PROPAGATION_REQUIRES_NEW,即使用@Transactional(propagation = Propagation.REQUIRES_NEW)。这样做的效果是,内层方法将会独立创建一个新的事务,并不会受到外层事务的影响。这样,即使内层事务失败,外层事务也会继续提交。
总结起来,@Transactional注解可以用于实现事务管理,而嵌套@Transactional可以用于实现方法的独立事务控制。通过修改事务传播行为,我们可以实现嵌套事务的独立提交和回滚。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [Spring的@Transactional 嵌套研究](https://blog.csdn.net/wang_lianjie/article/details/103574836)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *2* *3* [@Transactional嵌套事务失效异常Transaction rolled back because it has been marked as rollback-only](https://blog.csdn.net/xiyang_1990/article/details/125870203)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文