1.アン@Transactionalアプローチは@Transactionalメソッド呼び出しの不在だった、それは役割トランザクションの失敗をリードします。状況が発生する可能性が高いです。
それはなぜ起こるのでしょうか?実際には、これはの使用に起因するSpring AOP
取引方法は、現在のクラスの外部コードと呼ばれている場合にのみ行われるので、生じ剤Spring
生成されたプロキシオブジェクトを管理します。
2.非公共トランザクション注釈の方法。@Transactionalは失敗します。
理由:エージェントは、ターゲットメソッドの前と後の切片に春AOP、トランザクションインターセプターにあることがあるDynamicAdvisedInterceptor
インターセプト法は、トランザクション注釈トランザクションの設定情報を取得します、
上記のようにスプリングAOP、なぜなら剤
TransactionInterceptor
傍受対象へ(トランザクションインターセプター)の前及び方法を実行した後、
DynamicAdvisedInterceptor
(CglibAopProxy内部クラス)インターセプト法または
JdkDynamicAopProxy
呼び出しメソッド間接的に呼び出す 呼び出し間接的方法を 方法を、どのあなたは、トランザクションの注釈トランザクションの設定情報を取得します。検証の修飾子取引方法が公開されていない彼は最初、公共のない財産は、@Transactionalの構成情報を取得していないだろう。
AbstractFallbackTransactionAttributeSource
computeTransactionAttribute
AbstractFallbackTransactionAttributeSource
computeTransactionAttribute
構成の問題は、3.Transactionalトランザクション構成属性のプロパティを伝播します。
伝播特性がするように構成されている場合:
TransactionDefinition.PROPAGATION_SUPPORTS
:現在のトランザクションが存在する場合は、トランザクションに追加され、何のトランザクション、非トランザクション方法場所は引き続き実行されていない場合。
TransactionDefinition.PROPAGATION_NOT_SUPPORTED
:非トランザクションの方法で実行すると、現在のトランザクションが存在する場合は、保留中の現在のトランザクションを置きます。
TransactionDefinition.PROPAGATION_NEVER
:現在のトランザクションが存在する場合、非トランザクションの方法で実行して例外がスローされます
4.場合もあります。
トランザクションによって注釈方法は、Bは、クラス内の取引方法を注釈されています。
@トランザクション
公共ボイドA(){
{試します
this.B();
}キャッチ(例外e){
logger.error();
}
}
しかし、方法Bの実装に与えられたが、ライブの異常Aキャッチされている場合、トランザクションは失敗します。