[英]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.