Spring事务传递类型:如何开启新的事务?
正确答案是 D. REQUIRES_NEW。
Spring 事务传递类型
Spring 提供了多种事务传递类型,用于控制不同方法之间的事务行为。其中,REQUIRES_NEW 是一个重要的类型,它能够在一个已有的事务中开启一个新的、独立的事务。
REQUIRES_NEW 的作用
当一个方法被标记为 REQUIRES_NEW 时,无论当前是否有事务存在,都会开启一个新的事务。这意味着,如果当前方法被调用时已经存在一个事务,它会创建一个新的、独立的事务,不会影响当前的事务。
示例
假设有两个方法:
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void method1() {
// 执行操作
}
@Transactional
public void method2() {
method1();
// 执行操作
}
当调用 method2() 时,会先进入一个事务,然后调用 method1()。由于 method1() 被标记为 REQUIRES_NEW,它会开启一个新的事务,与 method2() 的事务独立。
注意事项
- 使用 REQUIRES_NEW 时,需要确保新的事务能够独立地提交或回滚,不会影响到已有事务。
- 如果多个方法使用 REQUIRES_NEW,可能会导致多个事务嵌套,需要小心处理事务的提交和回滚。
其他事务传递类型
除了 REQUIRES_NEW,Spring 还提供了其他几种事务传递类型,例如:
- REQUIRED:如果当前存在一个事务,则加入该事务;否则创建一个新的事务。
- SUPPORTS:如果当前存在一个事务,则使用该事务;否则不创建事务。
- NOT_SUPPORTED:不使用事务,如果当前存在一个事务,则将其挂起。
- MANDATORY:必须在一个事务中运行,如果当前没有事务,则抛出异常。
总结
REQUIRES_NEW 是一种重要的事务传递类型,它能够在一个已有的事务中开启一个新的、独立的事务。在需要在已有事务中执行独立操作时,可以使用 REQUIRES_NEW 来确保操作的独立性。
原文地址: https://www.cveoy.top/t/topic/p4H5 著作权归作者所有。请勿转载和采集!