受動的から能動的に、最初の一歩を踏み出します。
この紙の記録:4つのトランザクションプロパティ、トランザクション分離レベル、スプリングトランザクション伝播特性の7種類、トランザクションばね装置(プログラム的、宣言)
- トランザクションの4つの特性(ACID)
- アトミック(原子性)
すべてが成功するか、すべて失敗のいずれかの整数、すべての操作。 - 一貫性(整合性)
データの可視性制約の一貫性は、トランザクション内の複数の操作の中間状態のデータが他のトランザクションには見えないことを保証することです。人の金が増加し、二つの動作中のトランザクション内の別の削減持っている中間状態別の人にもお金を切った人を含むトランザクションを:転送の例を理解することは比較的容易に説明の多くを見つけるためにオンラインで見てこのような状態は表示されません、それは国家のお金の初期転送を参照して完成オンにする必要がありますだけでなく、他のものは、このテーブルを呼び出しているこの時点では、この中間状態の一貫性を意味し、中間状態にお金を追加しませんでした状態。 - 分離(単離)
単離する際のユーザの複数のそのようなテーブルを用いて動作としてデータベースへの同時アクセスを、各ユーザのトランザクションのデータベースオープン、操作が他のトランザクションによって妨害されていない、互いに並行複数のトランザクションであります隔離。分離レベルに由来します - 持続性(耐久性)
トランザクションが送信されるとは、その後、トランザクションは操作がデータベース・システムに障害が発生した場合に発生したコミットしても、データベース内の変更されたデータが失われることはありません、永続的です。
ヒント:アトミックと異なる強調の一貫性:原子懸念状態は、いずれかのすべてが成功する、またはすべてが部分的に成功した状態が存在しない、失敗します。関心のデータの整合性の可視性は、中間状態データは、外部の可視のみ初期データ状態と最終状態外部に見えません
- アトミック(原子性)
- トランザクション分離レベル
の質問の4種類:
- 同時に二つの取引データ(失われた更新)を更新
- 更新コミットされていないトランザクションが完了し、データがロールバックされ、リード・トランザクションを読むダーティデータが更新されます読み込みます。(ダーティー読み取り)
- 同じクエリが2回以上同じトランザクションを実行すると、毎回異なるデータを取得します。通常、別の同時トランザクションは、二つの問い合わせ(非反復可能読み取り)中に更新されましたので、
- (ファントムリード)最初のトランザクションは、データの一部を読み出し、第2のトランザクションは、テーブルに新しいデータを挿入し、その後、これが最初のトランザクションで、同じデータの複数の行を読み取り
4つの分離レベル:
-
-
コミットされていない(非コミット読み取りの内容を)読んで
提出し、他のトランザクションを読むためにトランザクションが変更されていないことができます。汚れは、非反復可能読み取りを読み込み、ファントム読み込みが発生する可能性があります -
読んで(提出を読んで)コミット
のみ読み込む汚れを避けるために、その他の事項に提出された変更を読み込むための取引を可能にするが、非反復可能読み取りおよびファントム読み込みの問題がまだ発生する可能性があります -
反復可能読み取り(再読み込みすることができます)
トランザクションは、フィールドから何度も同じ値を読み取ることができることを確認してください。トランザクションの期間は、このフィールドに禁止他のトランザクションが汚れを防ぐために、更新されるように読み込み、非反復可能読み取りは、ファントム読み取りが、問題が残っています
-
シリアライズ(シリアライズ)
トランザクションは、テーブルからのトランザクションの持続時間を同じ行を読み取ることができることを確認し、他の禁止トランザクションの実行表の挿入、更新、削除。すべての同時実行性の問題は回避、パフォーマンスが低いことができます。
-
- 春の総務の伝播特性
Propagation.REQUIRED(必須):現在のトランザクションのサポート、トランザクションが現在新しい(現役選手、相互影響のロールバック)を作成されていない場合、トランザクションは現在、トランザクションを追加し、持っている場合
Propagation.NOT_SUPPORTED(NOT_SUPPORTEDを):非トランザクション方法で実施現在は回復総務の実施後、保留中のトランザクションが存在する現在のトランザクションを、置く場合の動作は、(表面はバック設定された元のトランザクションが正常に実行された);
Propagation.SUPPORTS(支援を):あなたは、現在のトランザクションが追加されている場合は、その後、ないではない場合業務。(現役選手、そこには何もあり、流れに行く)
トランザクションが現在の例外がスローされていない場合は、取引の実施を支援するための唯一の方法:(必須)Propagation.MANDATORY。(強くリーダーシップの意思決定をサポート)
PROPAGATION_NEVERを(決して):現在のトランザクションが存在する場合にのみサポート非トランザクション実行モード、例外がスローされます。(投じ)
Propagation.REQUIRES_NEW(REQUIRES_NEW):その後、トランザクションが作成した取引されていない場合は、新しいトランザクションを作成するために、現在のトランザクションを中断し、そこに、時事問題を、現在の業務をサポートしています。(独立した、互いに独立して)
Propagation.NESTED(ネストされたネストされたトランザクション):現在のトランザクションが存在する場合は、現在のトランザクション内に埋め込まれています。トランザクションなしの場合、新しいトランザクション自身の実行(およびとして必要)。ロールバックの内政は、外部の物事の提出には影響しません時にポイントとしてポイントを保存するために、ロールバックを使用してトランザクションを入れ子になった。しかし、ロールバックで戻って外部の内政をロールバックします。(プロアクティブプレイヤーは、他の人を気にしないでください、しかし、人々がお邪魔します)
注意:トランザクションが同じスレッドで有効である必要があり、 - トランザクションばね装置(プログラム的、宣言)
式プログラミング:またはプログラムでシステムによって提供される低レベルAPIコールを包装するための方法は、接触最終的に永続フレームワークコードではありません。
宣言型(主に):ステップ1:春の構成でトランザクションマネージャを設定します
ステップ2:@Transactional注釈でトランザクションメソッドを使用する必要の前に
例:<! -配置事务管理器- >
<豆ID = "のTransactionManager"クラス= "org.springframework.orm.hibernate3.HibernateTransactionManager">
<プロパティ名= "SessionFactoryの">
<refの豆= "mySessionFactory" />
< /プロパティ><! -配置事务传播特性- >
<TX:アドバイスID = "TestAdvice"トランザクション・マネージャー= "のTransactionManager">
<TX:属性>
<TX:メソッド名= "保存*"伝播= "REQUIRED" />
<TX:メソッド名= "デル*"伝播= "REQUIRED" />
<TX:メソッド名= "更新*"伝播= "REQUIRED" />
<TX:メソッド名= "追加*"伝播= "REQUIRED" / >
<TX:メソッド名= "見つける*"伝播= "REQUIRED" />
<TX:メソッド名= "取得*"伝播= "REQUIRED" />
<TX:メソッド名= "適用*"伝播= "REQUIRED" />
</ TX:>属性
</ TX:アドバイス>
<!-トランザクションクラスコンフィギュレーションに参加する- >
<AOP:config>の
<AOP:ポイントカットID = "allTestServiceMethod" =表現「実行(com.test.testAda.test.model.service * * *(..)。) 「/>
<AOP:顧問-REFは、ポイントカットを= "allTestServiceMethod"アドバイス-REF = "TestAdvice" />
</ AOP:config>の
注意事項:(1)アドバイス(推奨)名:各モジュールは、独自のアドバイスを持っているため、命名仕様で作られる必要がありますので、予備的なアイデアは、モジュール名+アドバイス(ちょうど命名規則)です。
(2)TX:属性タグはタイプ命名トランザクションの方法として構成されています。
如<TX:メソッド名= "保存*" 伝播= "REQUIRED" />
*は、トランザクションとして命名のこの方法に適合することを意味のすべての方法を始めとして保存することを表すワイルドカードである場合、。
伝播=「REQUIRED」代表はノー取引ならば、我々は新たなビジネスを作成し、現在のトランザクションをサポートします。これは、最も一般的な選択です。
(3)AOP:トランザクションに参加ポイントカット構成クラスタグを、データベースサービスで動作しているので、リガンドはトランザクションのものとサービスクラスを含むべきです。
まず、それは特に、ID名ことに留意すべきである、各モジュールと同じには独自の総務課を持っているので、私はすべて+モジュール名+ ServiceMethodので、初期の命名規則を考えます。そして、各モジュール間で異なるが、以下のいずれかであります:
表現= "実行(* com.test.testAda.test.model.service。*。*(..))"
*は最初の値への復帰を表し、下側の第2のサブパケットサービス担当*、*は、メソッドパラメータを表す「(..)」、第三のメソッド名を表します。
(4)AOP:顧問のトップラベルは、当社の業務を管理するために、2部構成のプロパティとして設定されている全体のトランザクション管理を統合します。
グラフィック: