如果一个Service类具有@Transactional的方法,那么spring将使用proxy来处理它。 但是如果一个Transactional方法调用另一个
@Transactional
public FeedBackModel getOne() {
///..
return getTwo();
}
@Transactional
public FeedBackModel getTwo() {
return null;
}
像这样。
如果是jdk代理,那么第二个@Transactional将无效。 但Spring PROPAGATION会正确处理这个问题。 它是如何工作的?
答案 0 :(得分:0)
如果您尝试在从 getTwo()
调用的 getOne()
中提交事务,这将不起作用,即使两者都是 @Transactional 也是如此。请参阅documentation:
...请采纳 Spring 团队的建议,只注释具体的 带有@Transactional 的类(以及具体类的方法) 注释。
注意:由于此机制是基于代理的,因此只有“外部”方法 通过代理进入的呼叫将被拦截。这意味着 'self-invocation',即目标对象中的一个方法调用一些 目标对象的其他方法,不会导致实际交易 在运行时即使调用的方法被标记为@Transactional!