spring中事务的传播特性有哪些

回复

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

    Spring框架中事务的传播特性主要有以下几种:

    1. REQUIRED(默认):如果当前没有事务,就新建一个事务;如果已经存在一个事务中,加入到这个事务中。这是最常见的传播行为,保证方法执行时总是在一个事务中。

    2. SUPPORTS:如果当前有事务,就加入到事务中;如果当前没有事务,就以非事务的方式执行。这种传播行为适用于读取数据等不需要事务支持的操作。

    3. MANDATORY:如果当前有事务,就加入到事务中;如果当前没有事务,则抛出异常。使用该传播行为时,必须保证外部事务存在。

    4. REQUIRES_NEW:每次方法都会新建一个事务,如果当前存在事务,则挂起当前事务。适用于需要独立事务的场景,例如有些操作需要使用独立的事务,即使外部方法失败,也不会影响到独立事务的提交。

    5. NOT_SUPPORTED:以非事务的方式执行方法,如果当前存在事务,则将其挂起。适用于一些不需要事务支持的操作,例如一些只读操作。

    6. NEVER:以非事务的方式执行方法,如果当前存在事务,则抛出异常。适用于一些明确不应该在事务中执行的方法,例如一些资源释放操作。

    7. NESTED:如果当前有事务,则在嵌套事务中执行;如果当前没有事务,则新建一个事务。嵌套事务可以看作是当前事务的子事务,它可以有自己的保存点,可以进行回滚或提交操作,但是最终的提交或回滚操作会受到外层事务的影响。适用于需要进行局部回滚的场景。

    这些事务的传播特性可以在Spring中使用@Transactional注解进行配置,也可以通过编程的方式使用TransactionTemplate来设置。根据实际需求选择合适的传播特性,能够更好地控制事务的行为。

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

    在Spring框架中,事务的传播特性指的是在一个方法调用另一个方法时,如何处理事务的传播行为。Spring提供了多个事务的传播特性供开发者选择使用,下面是Spring中常用的事务的传播特性:

    1. REQUIRED(默认):如果当前存在事务,则加入当前事务,如果没有事务,则创建一个新的事务。这是最常用的传播特性,适用于大多数情况。

    2. SUPPORTS:如果当前存在事务,则加入当前事务,如果没有事务,则以非事务方式执行。适用于对事务没有强制要求的方法,可以在不开启事务的情况下执行。

    3. MANDATORY:如果当前存在事务,则加入当前事务,如果没有事务,则抛出异常。适用于要求调用方法必须在事务范围内进行的情况。

    4. REQUIRES_NEW:无论当前是否存在事务,都创建一个新的事务。如果当前存在事务,则暂停当前事务,并在新事务中执行。适用于需要独立的事务执行的情况。

    5. NOT_SUPPORTED:无论当前是否存在事务,都以非事务方式执行。如果当前存在事务,则挂起该事务,直到方法执行完毕。适用于对事务没有要求的方法。

    除了以上常用的传播特性外,Spring还提供了其他的传播特性,如NEVER和NESTED。

    1. NEVER:如果当前存在事务,则抛出异常。适用于不允许在事务中调用的方法。

    2. NESTED:如果当前存在事务,则嵌套在当前事务中执行。如果没有事务,则创建一个新的事务。嵌套事务可以独立于外部事务进行回滚或提交操作。

    总之,Spring的事务传播特性非常灵活,可以根据不同的需求选择合适的传播特性来管理事务。开发人员可以根据具体情况选择事务的传播特性来确保数据的一致性和完整性。

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

    在Spring中,事务的传播特性定义了一个事务方法如何与已经存在的事务进行交互的规则。Spring框架提供了以下七种事务的传播特性:

    1. REQUIRED(默认):如果已经存在一个事务,则支持当前事务;如果不存在事务,则创建一个新事务。REQUIRED是最常用的传播特性。

    2. SUPPORTS:如果已经存在一个事务,则支持当前事务;如果不存在事务,则非事务执行。

    3. MANDATORY:如果已经存在一个事务,则支持当前事务;如果不存在事务,则抛出异常。

    4. REQUIRES_NEW:创建一个新事务,并且挂起当前事务(如果存在)。

    5. NOT_SUPPORTED:以非事务方式执行,并且挂起当前事务(如果存在)。

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

    7. NESTED:如果已经存在一个事务,则在嵌套事务内部执行;如果不存在事务,则创建一个新的嵌套事务。如果外部事务提交,则嵌套事务随之提交;如果外部事务回滚,则嵌套事务也会回滚。

    下面将依次介绍每种事务传播特性的具体操作流程和适用场景。

    REQUIRED

    REQUIRED是Spring事务传播特性的默认值。当一个方法被标注为REQUIRED传播特性时,在该方法执行之前,事务管理器会检查当前是否存在一个事务。如果存在,该方法将在该事务中执行;如果不存在,事务管理器将创建一个新事务。该特性适用于大多数的业务场景,确保方法的执行在一个事务中。

    SUPPORTS

    SUPPORTS传播特性表示如果当前存在一个事务,则该方法执行在这个事务中;如果不存在事务,则以非事务方式执行。SUPPORTS适用于不具备强一致性要求的查询型操作。比如,查询数据库中的数据,该操作不需要进行事务控制。

    MANDATORY

    MANDATORY传播特性表示如果当前存在一个事务,则该方法执行在这个事务中;如果不存在事务,则将抛出异常。该传播特性适用于必须在一个事务中运行,如果没有事务则抛出异常。

    REQUIRES_NEW

    REQUIRES_NEW传播特性表示创建一个新事务并挂起当前事务(如果存在)。该传播特性适用于某个方法需要独立于当前事务运行,并且需要在自己的事务内提交或回滚所有的更改。

    NOT_SUPPORTED

    NOT_SUPPORTED传播特性表示以非事务方式执行,并且挂起当前事务(如果存在)。该传播特性适用于某个方法不应该在事务中执行,无论当前是否存在事务。

    NEVER

    NEVER传播特性表示以非事务方式执行,并且如果存在事务,则抛出异常。该传播特性适用于某个方法不允许在事务中执行,如果存在事务,则抛出异常。

    NESTED

    NESTED传播特性表示如果当前存在一个事务,则在该事务的上下文中执行一个嵌套事务;如果不存在事务,则创建一个新的嵌套事务。嵌套事务是一个针对外部事务的逻辑事务,它可以独立于外部事务进行提交或回滚。如果外部事务提交,则嵌套事务也会随之提交;如果外部事务回滚,则嵌套事务也会回滚。

    以上是Spring中事务的传播特性的介绍和各种特性适用的场景。根据不同的业务需求和数据一致性要求,可以选择适合的事务传播特性来管理事务的行为。

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

400-800-1024

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

分享本页
返回顶部