何时提交交易



我需要一些关于Spring交易的澄清。在ClassA中,我正在创建一个解密事务。我从ClassA呼叫ClassBmethod1()ClassB在类级别中具有@Transactional(propagation = Propagation.REQUIRED)注释。在method1()中,我正在执行保存操作。

我的问题是,这些数据何时提交?当控制权从method1()?或者在ClassA中,我们手动提交事务?。

代码:

A类

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
}
}

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

  • AB都是Spring Bean吗
  • AB中的事务是否使用相同的transactionManager bean
  • 也许A是使用TransactionTemplate而不是普通的TransactionManager对象编写的

不建议混合使用手动和声明性事务管理,因为您不得不猜测。我想它会出现在transactionManager上,而你没有展示。

最新更新