gpt4 book ai didi

java - 如何在多线程中使用spring事务

转载 作者:IT老高 更新时间:2023-10-28 13:05:22 25 4
gpt4 key购买 nike

我有一个方法如下:

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不会提交,因为之前已经提交了事务。

我可以将@Transactional(propagation = Propagation.REQUIRES_NEW) 用于方法B。这可以让 methodB 有一个新的事务。但是根据spring doc,methodA的transcation会在调用methodB时暂停。我在这里感到很困惑。

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

最佳答案

不,methodB() 不会与 methodA() 在同一事务中执行。 Spring 的 @Transactional 仅适用于单个线程 - 当线程第一次进入带有 @Transactional 的方法(或带有 @ 的类中的方法)时,它会创建一个 session 事务性),然后在离开该方法时提交。

在您的示例中,事务将在您安排线程池中的作业后结束。 methodB() 会有它自己的事务。

关于java - 如何在多线程中使用spring事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10407301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com