Spring 交易流程

Spring Transactions Flow

需要了解lockData的三个流是否都在一个事务中。当流程返回到 Class A1[= 时,我可以看到 Class C1 在 table 员工上添加的行锁吗21=]?

当前流程是:A1 的实例调用 B1 的实例,后者又调用 C1

的实例
class A1 {
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void lockData(){ 
        B1 classBObj = ctx.getBean("B1");
        boolean locked = classBObj.lockData();      
        //Check if lock on employee table is still there.
    }   
}

class B1 {
    @Transactional(propagation = Propagation.REQUIRED)
    public void lockData(){ 
        C1 classCObj = ctx.getBean("C1");
        classCObj.lockData();   
        return true;
    }
}

class C1 {  
    public void lockData(){ 
        executeQuery("select * from employee where emp_id=1 for update");
        return true;
    }
}

如果使用的 A1 实例是 spring-bean 并通过 spring bean 上下文注入,那么是的,对 a1.lockData() 的调用(及其所有嵌套调用) 将在一笔交易中执行。

为了完整起见,我建议用 @Transactional(propagation = Propagation.REQUIRED) 注释 C1:lockData