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
。
需要了解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
。