我有一个服务实现,如下所示:
class FooImpl implements Foo {
@Override
@Transactional(...)
public void doSomething(String baz) {
return this.doSomething(Arrays.asList(new String[] { baz }));
}
@Override
@Transactional(...)
public void doSomething(List<String> bazList) {
// do something crazy
return null;
}
}
我想了解一下,这里发生了什么?我正在从另一个带有 @Transactional
注释的方法调用一个带有 @Transactional
注释的方法(方法转发)...
我的问题:
我上面的情况是否造成了任何奇怪的情况?它似乎工作正常,所以我认为正在使用外部事务并且没有创建新事务。它是否正确?另外,关于如何验证/调试这个的任何提示?
最佳答案
这是一个典型的情况。 @Transactional
有一个propagation
属性。此属性定义调用 @Transactional
方法时的行为 - 是否需要新事务、是否需要现有事务等。
默认情况下,传播是REQUIRED
,这意味着 - 如果不存在则将启动一个新事务;否则将使用现有的。
Read here about transaction propagation .
这里要提到的另一件事是,(在某些配置场景中)如果您调用同一类的方法,则不会触发事务拦截器,因此根本不考虑传播。因此,在您的情况下,第二种方法中的 @Transactional
很可能被忽略。
关于java - 包含 Spring 的 @Transactional 注解的方法的方法转发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6915012/