什么是spring 事务传播

worktile 其他 42

回复

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

    Spring事务传播是指在一个事务方法被调用时,当前的事务如何传播到被调用的方法。在Spring框架中,事务是通过AOP(面向切面编程)来实现的。

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

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

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

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

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

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

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

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

    这些事务传播行为可以通过在方法上使用@Transactional注解来进行配置。例如:

    @Transactional(propagation = Propagation.REQUIRED)
    public void doSomething() {
    // 事务方法的逻辑
    }

    在使用Spring事务传播时,需要根据具体的业务需求选择合适的传播行为。合理地配置事务传播可以确保在多个事务方法调用的场景中,事务的正确传播和管理。

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

    Spring事务传播是指在一个包含多个事务操作的方法中,当需要开启新的事务时,如何处理已经存在的事务。事务传播定义了事务方法在调用链中与其他事务方法的交互方式。

    下面是Spring事务传播的五种类型:

    1. REQUIRED(默认):如果当前方法在一个事务中运行,那么这个事务将会被沿用;如果当前方法不在一个事务中运行,那么将会开启一个新的事务。

    2. SUPPORTS:如果当前方法在一个事务中运行,那么这个事务将会被沿用;如果当前方法不在一个事务中运行,那么它将以非事务的方式运行。

    3. MANDATORY:如果当前方法在一个事务中运行,那么这个事务将会被沿用;如果当前方法不在一个事务中运行,那么抛出一个异常。

    4. REQUIRES_NEW:无论当前方法是否在一个事务中运行,都会开启一个新的事务并在它自己的事务中运行。

    5. NOT_SUPPORTED:无论当前方法是否在一个事务中运行,都会以非事务的方式运行;如果当前存在一个事务,则将当前事务挂起。

    事务传播对于处理事务嵌套和事务间的依赖关系非常重要,根据实际的业务需求选择适当的传播类型可以确保事务的一致性和完整性,同时避免不必要的性能开销和死锁。在Spring框架中,通过使用@Transactional注解或编程方式配置事务传播行为。

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

    Spring 是一个开源的Java应用框架,其中一个关键特性就是事务管理。事务是一组操作单元,这些操作单元要么全部成功执行,要么全部回滚。Spring 事务传播定义了在多个事务之间如何传播和管理事务的行为。

    在Spring中,事务传播有七种不同的传播行为,每种行为适用于不同的场景。下面将介绍每种事务传播行为的含义以及使用方式。

    1. REQUIRED:如果当前存在事务,则加入该事务中执行,如果当前没有事务,则创建一个新的事务。这是最常用的传播行为,它确保方法被包含在一个事务中。

    2. SUPPORTS:如果当前存在事务,则加入该事务中执行,如果当前没有事务,则以非事务方式执行。这种传播行为适用于不需要强制要求事务的场景。

    3. MANDATORY:如果当前存在事务,则加入该事务中执行,如果当前没有事务,则抛出异常。这种传播行为适用于必须在一个已存在的事务中执行的场景。

    4. REQUIRES_NEW:创建一个新的事务,并且如果当前存在事务,则将当前事务挂起。这种传播行为适用于需要独立的事务执行的场景。

    5. NOT_SUPPORTED:以非事务方式执行,如果当前存在事务,则将当前事务挂起。这种传播行为适用于不需要事务支持的场景。

    6. NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。这种传播行为适用于必须在没有事务的环境中执行的场景。

    7. NESTED:如果当前存在事务,则在嵌套事务中执行,如果当前没有事务,则创建一个新的事务。嵌套的事务可以回滚到保存点,该传播行为适用于需要嵌套事务支持的场景。

    在Spring中,我们可以使用@Transactional注解来配置事务传播行为。通过将@Transactional注解添加到方法上,可以指定事务的传播行为。

    例如:

    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void executeTransaction() {
    // 执行业务逻辑
    }

    上述代码中,我们使用了REQUIRES_NEW传播行为,表示该方法将创建一个新的事务并执行。

    除了注解的方式,还可以使用编程方式来配置事务传播行为。通过在代码中使用TransactionTemplate类,可以在方法中指定事务传播行为。

    例如:

    @Autowired
    private TransactionTemplate transactionTemplate;

    public void executeTransaction() {
    transactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
    transactionTemplate.execute(new TransactionCallbackWithoutResult() {
    protected void doInTransactionWithoutResult(TransactionStatus status) {
    // 执行业务逻辑
    }
    });
    }

    总结:
    Spring 事务传播定义了在多个事务之间如何传播和管理事务的行为。根据不同的需求,可以选择合适的传播行为,以实现事务的一致性和可靠性。通过注解或编程方式,可以灵活配置事务传播行为以满足不同场景的需求。

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

400-800-1024

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

分享本页
返回顶部