如何在多线程中使用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