[英]How to use spring transaction in multithread
我有一个方法如下:
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();
}
方法B可以正常工作吗? 根据我的理解,methodB会附加methodA的事务,如果methodA先于methodB退出呢? 我猜只有 methodA 可以被事务提交。 但是methodB不会提交,因为之前提交的事务。
我可以将 @Transactional(propagation = Propagation.REQUIRES_NEW) 用于 methodB。 这可以让methodB 有一个新的事务。 但是根据spring doc,methodA的事务在调用methodB时会挂起。 我在这里感到很困惑。
任何人都可以帮助我解决这个问题吗? 提前致谢。
不, methodB()
将不会在相同的事务中执行methodA()
Spring 的@Transactional
仅适用于单个线程 - 当线程第一次进入带有@Transactional
的方法(或带有@Transactional
的类中的方法)时,它会创建一个会话,然后在离开该方法时提交它。
在您的示例中,事务将在您在线程池中安排作业后结束。 methodB()
将有它自己的事务。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.