这个问题来自于,如果我在classA中有methodA和methodB,如下所示
public class classA {
public void methodA() {
// some code
...
// time to deal with db
methodB();
}
@Transactional
public void methodB() {
// insert a record
throw new RuntimeException("testing");
}
}
在 classB 中直接调用methodA,对methodB没有任何事务影响(这就是说,即使发生了RuntimeException
,spring也不会回滚插入操作)。
当我将@Transactional
从methodB移动到methodA,并再次调用methodA时,@Transactional
注释可以正常工作。
但是,如果我在methodA
中有很多工作要做,那么会在总执行时间内锁定表吗?
答案 0 :(得分:0)
好吧,我将添加一个新类(即classC)并将methodB(使用Transactional注释)移动到新类作为变通方法。
如果在同一个类中调用该方法,则弹簧AOP的限制是@Transactional
不起作用。
请参阅@Transactional method called from another method doesn't obtain a transaction
答案 1 :(得分:0)
Spring本身不处理事务。 @Transactional注释允许Spring的代理类围绕原始方法注入事务开始和提交/回滚方法。