Как использовать транзакцию 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();
}

Может ли метод B работать хорошо? Насколько я понимаю, метод B прикрепит транзакцию метода A, что, если метод A завершится до метода B?Я предполагаю, что только метод A может быть зафиксирован транзакцией. Но метод B не будет зафиксирован, потому что транзакция была зафиксирована ранее.

Могу ли я использовать @Transactional (propagation = Propagation.REQUIRES _NEW )для метода B. Это может позволить методу B создать новую транзакцию. Но согласно весеннему документу транзакция метода A приостанавливается, когда он вызывает метод B. Я чувствую себя очень запутанным здесь.

Может ли кто-нибудь помочь мне в этом вопросе? Заранее спасибо.

37
задан Jacky 2 May 2012 в 03:25
поделиться