私は以下のような方法があります:
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はコミットしません。
methodBに@Transactional(propagation = Propagation.REQUIRES_NEW)を使用できますか?これにより、methodBに新しいトランザクションを持たせることができます。しかし、春のドキュメントによると、methodAのトランザクションはmethodBを呼び出すときに一時停止します。ここはとても混乱しています。
誰かがこの問題について私を助けることができますか?前もって感謝します。