簡體   English   中英

如何在多線程中使用spring事務

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM