接続1。
トランザクション自らの業務、トランザクションメソッドを呼び出します:1.伝播は、メソッド呼び出しトランザクションREQUIRES_NEWの使用があること、現在のトランザクションメソッドは、トランザクションを使用する方法の別の取引方法と呼ばれ、デフォルト値が要求され、すなわち、トランザクション伝播の動作を指定しましたトランザクションが保留されています。
2.分離指定されたトランザクション分離レベル、READ_COMMITTEDの最も一般的に使用される値。
デフォルトでは、すべての実行時の異常3.春の宣言的トランザクション、ロールバックは、デフォルト値が正常に取ることができ、対応する属性によって提供することができます。
4.読み取り専用指定されたトランザクションが読み取り専用です。トランザクションデータは読み取り専用が、最適化トランザクションデータベースエンジンに助けることができるデータを、更新されていないことを示します。つまり、値が唯一の読み取り専用= trueを設定し、データベースの仕組みを、読んでいる場合。
ロールバックトランザクションを強制する前に5.指定されたタイムアウト時間を占有することができます。
// 添加事务注解 @Transactional(伝播= Propagation.REQUIRES_NEW、 単離 = Isolation.READ_COMMITTED、 noRollbackFor = {UserAccountException。クラス) @Override 公共 ボイド購入(文字列名、文字列ISBN){...}
プラスnoRollbackForではなく、ロールバックUserAccountExceptionが例外を指定遭遇した後、我々はトランザクションの注釈を追加した場合でも、testBookShopServiceをテストしたが、バランスをロールバックしていない1001年にインベントリデータベースまたは1を減少させたこと、不十分な経験です。
@Transactional(伝播= Propagation.REQUIRES_NEW、 単離 = Isolation.READ_COMMITTED、 読み取り専用 = 偽、 タイムアウト = 3 ) @Override 公共 ボイド購入(文字列名、文字列ISBN){ 試み{ のThread.sleep( 2000 ); } キャッチ(InterruptedExceptionある電子){} }
私たちは読み取り専用= falseを設定して、購入のデータを更新したいので。設定されたタイムアウト時間のロールバックを強制的に指定しました。私たちは、3S <ご購入の内部で一緒に寝る、そして睡眠2S。
そして、データベースのリセットのデータ:
我々はtestBookShopServiceをテストするこの時点で、結果は次のとおりです。
私たちは、2000 5000、5S> 3Sに変更されます、そしてtestBookShopServiceをテストし、結果は次のとおりです。
我々はバランスの購入を再度、しかしので、ロールバックを強制するために、<時間のプログラムの実行を時間= 3秒のロールバックを強制することができますが。