Spring 七种事务传播性介绍

独步天下 2024-02-22 ⋅ 20 阅读

1. 事务传播性概述

Spring 提供了七种事务传播性级别,用于定义在方法调用过程中如何处理事务的传播。事务传播性是指当一个带有事务的方法被另一个方法调用时,被调用方法如何处理事务。本文将详细介绍这七种事务传播性级别。

2. REQUIRED

REQUIRED 是默认的事务传播性级别。它表示被调用方法必须运行在已存在的事务内部,如果没有现有的事务,则会为方法创建一个新的事务。如果调用者已经运行在一个事务中,被调用方法将会加入到调用者的事务中。这样,整个过程将被包装在一个大的事务中,如果任何一部分出现问题,整个过程将会回滚。

3. SUPPORTS

SUPPORTS 表示被调用方法可以运行在事务内部,也可以在没有事务的情况下运行。如果被调用方法在一个事务中被调用,则它会加入事务中。否则,它将在没有事务的环境下运行。这种事务传播性级别适用于那些不需要强制要求运行在事务中的方法。

4. MANDATORY

MANDATORY 表示被调用方法必须运行在一个已存在的事务内部。如果被调用方法在一个事务不存在的情况下被调用,则会抛出一个异常。

5. REQUIRES_NEW

REQUIRES_NEW 表示方法必须在自己的事务中运行。如果被调用方法已经运行在一个事务中,那么该事务将被挂起,然后为被调用方法创建一个新的、独立的事务。如果任何一部分出现问题,只有被调用方法的事务将会回滚,调用者的事务将不受影响。

6. NOT_SUPPORTED

NOT_SUPPORTED 表示被调用方法将会在没有事务的环境下运行。如果被调用方法在一个事务中被调用,则该事务将会被挂起,然后被调用方法将在一个没有事务的环境下运行。

7. NEVER

NEVER 表示被调用方法将不会在事务环境中运行。如果被调用方法在一个事务中被调用,则会抛出一个异常。

8. NESTED

NESTED 表示被调用方法将会在一个嵌套的事务内运行。如果调用者运行在一个事务中,并且被调用方法在调用者事务的上下文中运行,则被调用方法将会在一个嵌套的事务内运行。嵌套事务与外部事务相互独立,但是当外部事务回滚时,嵌套事务也会被回滚。

9. 使用事务传播性

在 Spring 中设置事务传播性非常简单。只需在方法上使用 @Transactional 注解,并指定合适的事务传播性级别即可。

@Transactional(propagation = Propagation.REQUIRED)
public void myMethod() {
    // 方法逻辑
}

结论

通过使用这七种不同的事务传播性级别,我们可以灵活地控制方法在事务环境中的行为。了解每种事务传播性的特性和用途,将有助于我们在开发 Spring 项目时更好地使用事务管理。

参考资料:


全部评论: 0

    我有话说: