我需要一些关于Spring交易的澄清。在ClassA
中,我正在创建一个解密事务。我从ClassA
呼叫ClassB
的method1()
。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
(在堆栈跟踪中可见(的调用的方面之后,将提交事务。然而,这将取决于:
A
和B
都是Spring Bean吗A
和B
中的事务是否使用相同的transactionManager
bean- 也许
A
是使用TransactionTemplate
而不是普通的TransactionManager
对象编写的
不建议混合使用手动和声明性事务管理,因为您不得不猜测。我想它会出现在transactionManager
上,而你没有展示。