如何在多线程中使用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将不会提交,因为该事务之前已提交。

我可以对方法B使用@Transactional(propagation =

Propagation.REQUIRES_NEW)。这可以使methodB进行新的事务。但是根据spring

doc,调用methodB时methodA的事务将暂停。我在这里感到很困惑。

谁能帮我解决这个问题?提前致谢。

回答:

不,methodB()将不会与在同一事务中执行methodA()Spring@Transactional只能在单个线程上工作-

当线程首先使用时@Transactional(或类中的方法使用@Transactional)输入方法,然后在离开该方法时提交它,它将创建一个会话。

在您的示例中,事务将在您在线程池中计划作业后结束。methodB()将拥有自己的交易。

以上是 如何在多线程中使用Spring事务 的全部内容, 来源链接: utcz.com/qa/422064.html

回到顶部