何时将提交交易?

时间:2018-11-14 09:56:22

标签: java spring spring-transactions

我需要对Spring翻译进行一些说明。 在ClassA中,我正在创建一个声明式事务。我从ClassA呼叫method1()中的ClassBClassB在课程级别具有@Transactional(propagation = Propagation.REQUIRED)注释。 在method1()中,我正在执行保存操作。

我的问题是,何时提交数据?在控制权来自的过程中是否会承诺 method1()?还是在ClassA中我们要手动提交交易?

代码:

ClassA

class ClassA {

    void myMethod() {
        TransactionStatus status = null;
        DefaultTransactionDefinition def =
                new DefaultTransactionDefinition(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
        def.setTimeout(contentFileProcessingConfigBean.getFileCopyTransactionTimeout());
        status = transactionManager.getTransaction(def);

        b.method1();

        if (status != null) {
            transactionManager.commit(status);
        }
    }

}

ClassB

@Transactional(propagation = Propagation.REQUIRED)
class ClassB {

void method1() {

//doing save operation

}
}

1 个答案:

答案 0 :(得分:0)

可能在B.method1()完成之后,将调用包装到@Transactional的方面(在堆栈跟踪中可见)将提交事务。但是,这取决于:

  • AB都是Spring bean吗?
  • transactionManagerA中的事务使用的是同一B bean吗?
  • 如果A是使用TransactionTemplate而不是普通的TransactionManager对象编写的。

不建议您将手动和声明式事务管理混合使用,因为您必须猜测。我想这将是您未显示的transactionManager