如何在多线程中使用Spring事务

7 浏览
0 Comments

如何在多线程中使用Spring事务

我有一个如下所示的方法:

ClassA.java
@Transactional
public void methodA(){        
    ExecutorService executorService = Executors.newFixedThreadPool(4);
    executorService.execute(new Runnable() {
        public void run() {
            classB.methodB();
        }
});
}
ClassB.java
@Transactional
public void methodB(){
    updateDB();
}

methodB能正常工作吗?据我理解,methodB将附加到methodA的事务上,如果methodA在methodB之前退出,那么只有methodA可以被事务提交。但是,methodB将不会提交,因为事务已经在之前提交了。

我可以为methodB使用@Transactional(propagation = Propagation.REQUIRES_NEW)吗?这样可以让methodB拥有一个新的事务。但是根据Spring文档,当它调用methodB时,methodA的事务将被挂起。我在这个问题上感到非常困惑。

有人可以帮我解决这个问题吗?提前谢谢。

0