正确答案是 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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录