正如所讨论的那样,实际的交易在春天的解释性交易中被提交。例如,假设我有以下代码
@Service
@Transactional
class CustomerAService{
public void processCustomer(Customer customer){
//call dao and insert customer
furtherProcessCustomer(Customer customer);
//last line (a)
}
@Transactional(propagation=Propagation.REQUIRES_NEW)
public void furtherProcessCustomer(Customer customer){
//call another dao do some db work
//last line (b)
}
}
假如我停止执行@line //最后一行(a),那么将为processCustomer()方法提交trasaction。我试图在网上搜索,但没有得到太多信息
答案 0 :(得分:0)
Spring中的事务管理通过面向方面编程(AOP)代理对象发生。这意味着该方法必须干净地返回,以便提交事务。您的代码是"目标方法"在下图中,交易是在"交易顾问"中提交的。 More documentation here.
您的示例有点微妙,因为furtherProcessCustomer
方法是从内部调用同一个类,不会通过AOP代理对象调用,因此您的@Transactional(propagation=Propagation.REQUIRES_NEW)
会不被使用。
如果您有其他服务,也有@Transactional
注释,然后您调用了furtherProcessCustomer
,这将通过AOP代理对象发生,因此您将拥有嵌套事务。