在事务提交时的spring声明事务管理中

时间:2014-06-20 07:28:43

标签: java spring spring-mvc jdbc transactions

正如所讨论的那样,实际的交易在春天的解释性交易中被提交。例如,假设我有以下代码

@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。我试图在网上搜索,但没有得到太多信息

1 个答案:

答案 0 :(得分:0)

Spring中的事务管理通过面向方面编程(AOP)代理对象发生。这意味着该方法必须干净地返回,以便提交事务。您的代码是"目标方法"在下图中,交易是在"交易顾问"中提交的。 More documentation here.

AOP transaction processing

您的示例有点微妙,因为furtherProcessCustomer方法是从内部调用同一个类,不会通过AOP代理对象调用,因此您的@Transactional(propagation=Propagation.REQUIRES_NEW)会不被使用。

如果您有其他服务,也有@Transactional注释,然后您调用了furtherProcessCustomer,这将通过AOP代理对象发生,因此您将拥有嵌套事务。