spring如何传播事务的

不及物动词 其他 14

回复

共3条回复 我来回复
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    Spring框架通过AOP(面向切面编程)和@Transactional注解的方式来实现事务的传播。

    首先,Spring事务传播通过AOP切面技术来拦截方法调用,从而实现事务的传播。在Spring中,事务的传播是基于方法的调用关系来进行的。当一个方法调用另一个带有事务的方法时,Spring会决定如何处理事务。

    其次,Spring提供了多种事务传播行为,通过@Transactional注解来指定。常用的事务传播行为有以下几种:

    1. REQUIRED(默认值):如果当前存在事务,则加入该事务,如果当前没有事务,则创建一个新的事务。

    2. SUPPORTS:如果当前存在事务,则加入该事务,如果当前没有事务,则以非事务方式执行。

    3. MANDATORY:如果当前存在事务,则加入该事务,如果当前没有事务,则抛出异常。

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

    5. NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,则将当前事务挂起。

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

    7. NESTED:如果当前存在事务,则在嵌套事务内执行,如果当前没有事务,则创建一个新的事务。

    最后,Spring框架通过事务管理器来控制事务的提交和回滚。事务管理器可以配置在Spring的配置文件中,常用的事务管理器有JdbcTransactionManager、HibernateTransactionManager和JtaTransactionManager等。

    总结起来,Spring通过AOP和@Transactional注解来实现事务传播,通过事务管理器来管理事务的提交和回滚,通过事务传播行为来控制方法的事务行为。

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

    Spring框架提供了事务管理的机制,使开发人员可以轻松地管理数据库事务。Spring通过以下几种方式传播事务:

    1. REQUIRED传播方式:
      使用REQUIRED传播方式,如果当前存在事务,则加入该事务,如果当前不存在事务,则创建一个新的事务。这是默认的事务传播方式。

    2. SUPPORTS传播方式:
      使用SUPPORTS传播方式,如果当前存在事务,则加入该事务,如果当前不存在事务,则以非事务方式执行。

    3. MANDATORY传播方式:
      使用MANDATORY传播方式,如果当前存在事务,则加入该事务,如果当前不存在事务,则抛出异常。

    4. REQUIRES_NEW传播方式:
      使用REQUIRES_NEW传播方式,始终创建一个新的事务,并挂起当前事务,直到新的事务完成。

    5. NOT_SUPPORTED传播方式:
      使用NOT_SUPPORTED传播方式,以非事务方式执行,如果当前存在事务,则挂起事务直到非事务执行完成。

    除了传播方式之外,Spring还提供了一些其他的事务选项,包括事务隔离级别、事务超时时间等。通过配置这些选项,开发人员可以更好地控制事务的行为。

    Spring事务的传播机制能够满足不同场景下的需求,并且提供了灵活的配置选项,使开发人员能够根据实际情况进行调整。事务管理的功能使得数据库操作更加可靠和高效。

    1年前 0条评论
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    在Spring框架中,事务是通过TransactionManager来管理的。Spring提供了多种传播行为的事务传播方式,可以根据具体的业务需求来选择合适的传播行为。

    一、事务传播行为介绍

    1. REQUIRED:如果当前存在事务,则加入该事务;如果没有事务,则创建一个新的事务。
    2. SUPPORTS:支持当前事务,如果当前存在事务,则加入该事务;如果没有事务,则以非事务方式执行。
    3. MANDATORY:强制要求当前存在事务,如果当前没有事务,则抛出异常。
    4. REQUIRES_NEW:创建一个新的事务,如果当前存在事务,则将当前事务挂起。
    5. NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,则将当前事务挂起。
    6. NEVER:以非事务方式执行操作,如果当前存在事务,则抛出异常。
    7. NESTED:如果当前存在事务,则在嵌套事务内执行;如果没有事务,则创建一个新的事务。

    二、事务传播行为的配置方式

    1. 使用注解:可以在方法上使用@Transactional注解来配置事务的传播行为。例如:
    @Transactional(propagation = Propagation.REQUIRED)
    public void methodA() {
        // do something
    }
    
    1. 使用XML配置:在Spring的XML配置文件中,可以通过<tx:method>元素来配置事务的传播行为。例如:
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
    
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="methodA" propagation="REQUIRED" />
        </tx:attributes>
    </tx:advice>
    
    <aop:config>
        <aop:advisor advice-ref="txAdvice"
            pointcut="execution(* com.example.service.*.*(..))" />
    </aop:config>
    

    三、事务传播行为的使用场景

    1. REQUIRED:通常用于对多个数据库操作进行一个原子性的事务管理。如果方法A调用方法B,方法B成功则方法A也成功,若方法B失败则方法A也失败,整个过程都在一个事务中进行。
    2. SUPPORTS:实现一个支持事务的方法,更加灵活,可以在同一个方法中对多个数据库操作进行事务管理,也可以在同一个方法中只对特定的数据库操作进行事务管理。
    3. REQUIRES_NEW:在某个方法中需要创建一个新的事务并且不受调用者事务的约束时,可以使用该传播行为。
    4. NESTED:在某个方法中需要嵌套一个事务,即在方法A的事务中又嵌套了一个方法B的事务,方法B的事务将由方法A的事务进行管理,同时具备回滚点和保存点功能,可以独立进行提交和回滚。

    总结:Spring提供了丰富的事务传播行为方式,可以根据具体需求选择合适的方式来管理事务。除了传播行为之外,还需要注意事务的隔离级别、超时时间等设置,以保证事务的正确性和性能。

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

400-800-1024

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

分享本页
返回顶部