我需要对Spring翻译进行一些说明。
在ClassA
中,我正在创建一个声明式事务。我从ClassA
呼叫method1()
中的ClassB
。
ClassB
在课程级别具有@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
}
}
答案 0 :(得分:0)
可能在B.method1()
完成之后,将调用包装到@Transactional
的方面(在堆栈跟踪中可见)将提交事务。但是,这取决于:
A
和B
都是Spring bean吗?transactionManager
和A
中的事务使用的是同一B
bean吗?A
是使用TransactionTemplate
而不是普通的TransactionManager
对象编写的。不建议您将手动和声明式事务管理混合使用,因为您必须猜测。我想这将是您未显示的transactionManager
。