データベースのロールバックに Springs @Transactional を使用するメソッドがあります。次のようにトランザクションマネージャーを定義すると、正常に機能します。
<tx:annotation-driven transaction-manager="txManager" mode="proxy" />
しかし、変更するmode="aspectj"
と、メソッドが例外をスローしてもロールバックしません。
2 つのモードの使用方法に違いはありますか?
データベースのロールバックに Springs @Transactional を使用するメソッドがあります。次のようにトランザクションマネージャーを定義すると、正常に機能します。
<tx:annotation-driven transaction-manager="txManager" mode="proxy" />
しかし、変更するmode="aspectj"
と、メソッドが例外をスローしてもロールバックしません。
2 つのモードの使用方法に違いはありますか?
「aspectj」モードは、ロード時ウィービングまたはコンパイル時ウィービングが有効になっている場合にのみ機能します。そうでない場合、@Transactional
アノテーションはアノテーション付きメソッドに適用されません。
private
デフォルトのプロキシ モードを使用してメソッドに注釈を付けることはできません。ここでaspectj
モードが役立ちます。特定のフレームワーク (Web サービス用の W2O など) では、クラス タイプ自体が機能する必要があります。クラスがプロキシ クラス ラッパーでラップされているため、プロキシ モードを使用すると、これが不可能になる場合があります。これは、 を使用するもう 1 つの理由ですAspectJ
。
public
メソッドが使用され、特別なフレームワークの制限がない場合は、プロキシ モードで十分です。
関連項目:トランザクション管理