トランザクション:トランザクションが、それらは単一の作業単位として扱われる一連のアクションで、これらのアクションは、どちらか完了している、またはすべてが動作しません。トランザクション管理は、エンタープライズクラスのアプリケーション開発に不可欠な技術であるデータを確実にします整合性と一貫性。取引の4つの重要な特性(ACID):
-アトミック(不可分):トランザクションは、トランザクション完了、または全く効果がないいずれかの原子性を保証するために、一連の動作、操作から成る、アトミック操作です。
-一貫性(一貫性):トランザクションを完了するために一度すべてのアクション、トランザクションが提出され、データやリソースは、ビジネス・ルールを満たすために一貫性の状態です。
-分離(隔離):多くのトランザクションが存在してもよいが、同じデータを扱うであろう、したがってデータの破損を防止するために、各トランザクションおよび他のトランザクションから単離されなければなりません。
-持続性(耐久性):トランザクションが完了すると、関係なく、その結果、通常の状況では、影響はありません、何が起こるかシステムエラー、トランザクションの結果は永続的なコンテナに書き込まれません。
Springのトランザクション管理:春は、両方のプログラムによるトランザクション管理をサポートしており、また、宣言的トランザクション管理をサポートしています。
-プログラム的トランザクション管理:とき、トランザクション管理プログラム、コミットとロールバックトランザクションを制御するために、ビジネス・プロセスに埋め込まトランザクション管理コード、各トランザクション処理のための追加のトランザクション管理コードに含まれなければなりません。
-宣言的トランザクション管理:プログラム的トランザクション管理を使用するよりも良好ほとんどの場合、トランザクション管理コードが宣言的にトランザクション管理を実装するために、ビジネスプロセスから分離され、トランザクション管理横断的関心事として、この方法は、SpringAOPフレームワークを通じてAOP、春の宣言的トランザクション管理のサポートにより、モジュール式にすることができ
ID①構成トランザクションマネージャ(<ビーンID =「のTransactionManager」クラス=「org.springframework.xxx.datasource.xxxTransactionManager」> <プロパティ名=「データソース」REF = " データソースプロファイル:アノテーションベースの実装工程「> </ property>の</豆>)、② トランザクション注釈(<TX開始:アノテーションドリブン/ ③、>)をトランザクション添加する方法で注釈を追加@Transactionalを。
トランザクション伝播特性:トランザクションメソッドが別のトランザクションメソッドによって呼び出されたときは、たとえば、トランザクションが広がっ方法を指定する必要があります。この方法は、既存のトランザクションを操作し続けることができ、またはそれは新しいトランザクションを開き、自らの業務を実行することができます。トランザクションの伝播が伝播特性によって指定することができる、春は、伝搬挙動の7種類を定義します。
デフォルト伝播挙動が要求前記図識別子は、2つの必要とさREQUIRED_NEWで使用され、トランザクション伝播属性は@Transactionalアノテーション伝播特性に定義することができる:例えば:
@Transactional(伝播= Propagation.REQUIRED)
同時トランザクションによって引き起こされる問題: 複数のトランザクションで同じアプリケーションまたは別のアプリケーションが同じデータセット上で同時に実行すると、予期しない問題がたくさんあることがあります3つのカテゴリがあります。
①ダーティ読み取り:2つのトランザクションのT1、T2について、T1、T2はT1のコンテンツは一時的かつ効果的でない読み込み、フィールドが更新されましたが、まだT2の後、ロールバックを提出されていないお読みください。
②ファントムを読み取る2つのトランザクションT1、T2のため、T1がテーブルから読み出されたフィールドであること、及び、テーブル内のデータT2z新しい行を挿入するために、その後、T1は再び同じシートから読み取り、さらにいくつかのライン。
非反復可能読み取り③2つのトランザクションT1は、T2、T1フィールドを読み取ると、フィールド更新T2 T1が同じフィールドを読み取るようにした後、値が異なっています。
トランザクション分離レベル:
-READ-UNCOMMITTED(非コミット読み取り):隔離の最低レベル、変更は送信されたデータを読み取ることが許可されていない、ダーティ・リード原因となり、非反復読み取りまたはファントム読み取り
-READ-COMMITTED(コミット読み取り): 、同時トランザクションが既に提出されたデータを読み取ることができるようにダーティリードを防止することができますが、ファントム読み取りまたは非反復可能読み取りがまだ発生する可能性があります
-REPEATABLE-READ(反復可能読み取り):複数のは、同じフィールドの結果が同じで読み取ったデータは、その事務自身変更されていない限り、あなたはダーティリードと繰り返し不可能読みますが、ファントムはまだ発生読み取りを防止することができます。
-serializable(シリアライズ): 分離の最高レベル、完全に準拠ACID分離レベル。すべてのトランザクションを順に一つずつ実行する、そのような問題との間の干渉を生成することは不可能である、すなわち、このレベルは、ダーティ・リード防止、非反復読み取り、ファントム読み取り。
:のような、スプリングアイソレーション特性指定分離レベルに@Transactionalアノテーションを使用
@Transactional(分離= Isolation.READ_COMMITTED)
デフォルトでは、ロールバックするすべてのランタイム例外のSpringの宣言的トランザクションは、また、オブジェクトのプロパティで設定することができます。その上noRollbackFor、RollbackForと:ここでは、という名前のプロパティが言及されていません。これは、通常はデフォルト値です。理解することができます。