spring事物如何传播

worktile 其他 34

回复

共3条回复 我来回复
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    Spring事务的传播行为主要指的是一个事务如何在方法调用中传播。Spring提供了七种事务传播行为,分别为:REQUIRED、SUPPORTS、MANDATORY、REQUIRES_NEW、NOT_SUPPORTED、NEVER和NESTED。

    1. REQUIRED:如果当前存在一个事务,则加入该事务中执行;如果当前没有事务,则创建一个新的事务执行。这是最常用的传播行为,默认情况下,大多数方法都应该使用这个传播行为。

    2. SUPPORTS:如果当前存在一个事务,则加入该事务中执行;如果当前没有事务,则以非事务的方式执行。如果方法不需要事务的支持,但是如果当前存在事务,则该方法会沿用当前事务。

    3. MANDATORY:如果当前存在一个事务,则加入该事务中执行;如果当前没有事务,则抛出异常。强制要求当前方法必须运行在一个事务中。

    4. REQUIRES_NEW:创建一个新的事务,并且暂停当前事务(如果存在)。新的事务将完全独立于当前事务。

    5. NOT_SUPPORTED:以非事务的方式执行,并且暂停当前事务(如果存在)。当前方法将不会运行在一个事务中。

    6. NEVER:以非事务的方式执行,如果当前存在一个事务,则抛出异常。

    7. NESTED:如果当前存在一个事务,则创建一个嵌套事务并执行;如果当前没有事务,则执行与REQUIRED传播行为类似的操作。

    不同的事务传播行为适用于不同的场景,需要根据实际需求进行选择。在使用Spring进行事务管理时,我们可以通过设置@Transactional注解的propagation属性来指定事务的传播行为。同时,可以通过使用TransactionTemplate或者编程式事务管理来指定事务的传播行为。

    1年前 0条评论
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    Spring事务的传播行为决定了在一个事务方法调用期间,该方法如何与已存在的事务进行交互,并且如何为新事务定义其边界。

    Spring框架提供了七种事务传播行为,分别是:

    1. REQUIRED(默认):若当前存在事务,则加入该事务,若不存在事务,则创建一个新的事务。这是最常用的传播行为。如果外部方法已经开启了事务,那么内部方法被调用时就会加入该事务进行处理,否则会开启一个新的事务。

    2. SUPPORTS:若当前存在事务,则加入该事务;若不存在事务,则以非事务方式执行。即如果外部方法已经开启了事务,那么内部方法被调用时就会加入该事务进行处理,否则以非事务方式执行。

    3. MANDATORY:若当前存在事务,则加入该事务;若不存在事务,则抛出异常。即内部方法被调用时必须要有事务存在,否则会抛出异常。

    4. REQUIRES_NEW:无论当前是否存在事务,都会创建一个新的事务。即内部方法被调用时都会创建一个新的事务,不管外部方法是否已经开启了事务。

    5. NOT_SUPPORTED:无论当前是否存在事务,都以非事务方式执行。

    6. NEVER:若当前存在事务,则抛出异常。即内部方法绝对不会在一个事务的上下文中运行,如果外部方法已经开启了事务,那么内部方法被调用时会抛出异常。

    7. NESTED:在一个已存在的事务中创建一个嵌套事务,如果存在事务,则在嵌套事务内运行。如果外部方法已经开启了事务,那么内部方法被调用时就会在该事务的上下文中创建一个新的嵌套事务。

    这些传播行为设置可以通过在方法上使用@Transactional注解进行配置,也可以在配置文件中进行全局设置。

    总的来说,Spring事务的传播行为提供了灵活的选项来控制事务边界和事务之间的交互方式,开发人员可以根据具体场景进行选择和配置。

    1年前 0条评论
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    Spring事务传播定义了在多个事务上下文中,一个事务如何传递或扩展到另一个事务的方式。Spring框架为事务传播提供了多种选项,以满足不同业务需求。

    Spring框架定义了七种不同的事务传播行为,每种行为都有其特定的用途和应用场景。在下面的内容中,将详细介绍这七种事务传播行为以及它们的用途。

    1. REQUIRED
      REQUIRED是默认的事务传播行为。如果当前没有事务存在,则创建一个新的事务。如果已经存在一个事务,则加入到该事务中。

    2. SUPPORTS
      SUPPORTS表示如果有事务存在,则在事务中执行;否则,在非事务的上下文中执行。

    3. MANDATORY
      MANDATORY表示必须在事务中执行。如果当前没有事务存在,则抛出异常。

    4. REQUIRES_NEW
      REQUIRES_NEW表示创建一个新的事务。如果当前存在一个事务,则挂起当前事务。

    5. NOT_SUPPORTED
      NOT_SUPPORTED表示不在事务中执行。如果有一个事务存在,则将其挂起。

    6. NEVER
      NEVER表示不在事务中执行。如果有一个事务存在,则抛出异常。

    7. NESTED
      NESTED表示在一个嵌套的事务中执行,该事务是当前事务的一部分。如果没有当前事务,则它的行为类似于REQUIRED。

    在Spring中,事务传播行为可以通过@Transactional注解来定义。在使用@Transactional注解时,可以使用propagation属性来指定事务传播行为。例如:

    @Transactional(propagation = Propagation.REQUIRED)
    public void updateData() {
    // 业务逻辑
    }

    除了使用@Transactional注解外,还可以在XML配置文件中使用tx:advice元素来定义事务传播行为。例如:

    <tx:advice id="txAdvice" transaction-manager="txManager">
    tx:attributes
    <tx:method name="update*" propagation="REQUIRED"/>

    通过选择合适的事务传播行为,可以确保业务操作的一致性和完整性。根据具体的业务需求,选择不同的事务传播行为是很重要的。

    1年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部