私はpropagation = Propagation.REQUIRES_NEW
トランザクションの性質を持っている方法があります。このメソッドは、同時に複数回呼び出すことができ、すべてのトランザクションのためにエラーがより発生した場合春のトランザクション:ロールバックトランザクション
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void createUser(final UserBean userBean) {
//Some logic here that requires modification in DB
}
をロールバックされます(他のトランザクションとは独立して)。
問題は、別のものが利用可能であっても、複数のトランザクションを作成してパフォーマンスの問題を引き起こす可能性があることです。 propagation = Propagation.REQUIRED
の
Javaのドキュメントは言う:Support a current transaction, create a new one if none exists.
これは、パフォーマンス上の問題を解決すると思われる、ないないそれは?
ロールバックの問題はどうですか?既存のトランザクションを使用しているときに新しいメソッド呼び出しがロールバックされる場合はどうなりますか?以前の呼び出しでもトランザクション全体をロールバックしませんか?
[EDIT] 私は私の質問は十分に明確ではなかったと思います。
私たちは、当社のサーバーに接続しているクライアントの数百を持っています。
クライアントごとに、トランザクションに関するフィードバック(OKまたは例外→ロールバック)を送信する必要があります。
私がREQUIRED
を使用している場合は、1つのトランザクションのみが使用されていますか?100番目のクライアントに問題が発生した場合、第1のクライアントのトランザクションもロールバックされますか?
これは、メソッドが呼び出されるたびに新しいトランザクションを作成するためのREQUIRES_NEWの要点です。はい、あなたが必要な場合、トランザクションがロールバックされ、それはすべてをロールバックします。 –
@DenisTulskiyそのすべての以前の呼び出しは、その関数、または現在の呼び出しスタックですか? –
@jidma:トランザクション全体、@ Eugenの答えを見てください。もし 'createUser'がクライアントコードを呼び出す最初のメソッドなら、REQUIRES_NEWとREQUIREDは同じものです –