了解 Spring 事务 - 当一个事务方法调用另一个事务方法时会发生什么?
只是为了理解Spring事务的工作原理,我想知道在以下情况下会发生什么,其中一个标记为的方法调用另一个标记为.@Transactional
@Transactional
假定配置使用所有默认设置。
@Service("myService")
@Transactional
public MyService{
public void myServiceMethod(){
myDAO.getSomeDBObjects();
}
}
@Repository("myDAO")
@Transactional
public MyDAOWithUsesBeyondMyService{
public void getSomeDBObjects(){...}
}
现在,如果我输入它,它显然会开始交易。然后,在深入研究会发生什么之后?交易已经存在的事实是否会导致没有新的交易诞生,或者我在这里创建了两个交易?MyService.myServiceMethod()
myDAO.getSomeDBObjects()
关于传播的文档(下面引用)似乎涵盖了这一点,但我想验证我的理解,我的处女大脑一次理解所有东西有点多。
传播:通常,在事务范围内执行的所有代码都将在该事务中运行。但是,您可以选择指定在事务上下文已存在时执行事务方法时的行为。例如,代码可以继续在现有事务中运行(常见情况);或者可以暂停现有事务并创建新事务。Spring提供了EJB CMT中熟悉的所有事务传播选项。要了解 Spring 中事务传播的语义,请参见第 10.5.7 节 “事务传播”。