propagation = Propagation.REQUIRES_NEW
トランザクション プロパティを持つメソッドがあります。
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void createUser(final UserBean userBean) {
//Some logic here that requires modification in DB
}
このメソッドは同時に複数回呼び出すことができ、エラーが発生した場合はすべてのトランザクションに対して (他のトランザクションから独立して) ロールバックされます。
問題は、別のトランザクションが利用可能であっても、Spring が複数のトランザクションを作成することを余儀なくされ、パフォーマンス上の問題が発生する可能性があることです。
の Java doc は次のようにpropagation = Propagation.REQUIRED
述べています。Support a current transaction, create a new one if none exists.
これでパフォーマンスの問題は解決したようですね。
ロールバックの問題はどうですか?既存のトランザクションの使用中に新しいメソッド呼び出しがロールバックした場合はどうなりますか? 以前の呼び出しでさえ、トランザクション全体をロールバックしませんか?
[編集] 私の質問は十分に明確ではなかったと思います:
サーバーには何百ものクライアントが接続されています。
クライアントごとに、トランザクションに関するフィードバックを送信する必要があります (OK または例外 -> ロールバック)。
私の質問は次のとおりです。使用する場合REQUIRED
、1 つのトランザクションのみが使用されるということですか。100 番目のクライアントで問題が発生した場合、最初のクライアントのトランザクションもロールバックされますか?