まず、トランザクションは何ですか
トランザクションがデータベースにアクセスするための一連の動作であり、データベースアプリケーションは、データベース・トランザクション・セットへのアクセスを介して達成されます。
第二に、取引の原則(ACID)
アトミック:トランザクションのコミット前に、すべてのトランザクションが実行されたり、子供がトランザクションを提出しない場合は何も、全体的に実行されない場合、他のサブトランザクションのデータベース操作がロールバックされ、バック状態にデータベースのいずれか、すべてのサブトランザクション場合正常に送信され、その後、すべてのデータベース操作が送信されます。
一貫性:トランザクションを実行するように、別の状態が正しい状態にあるデータベースから正しい変換。
アイソレーション:トランザクションの実行は、他の企業によって影響を受けることはできません。
持続性:、永続的にデータベースに格納されたトランザクションがコミットされると、タイムリーなデータベースサーバに障害が発生し、それがコミットトランザクションを失うことはありません。
第三に、取引の種類
JDBCトランザクション、JTA(JavaトランザクションAPI)トランザクション、コンテナ総務
。1、JDBCトランザクションは:JDBC処理サービスを接続することによって処理されて、同じトランザクションの動作は、接続オブジェクトで行われ、JDBC接続インタフェースは、2つのトランザクションモードを提供する:自動および手動提出提出し、トランザクションがJDBCでありますデフォルトで有効になっており、デフォルトの提出です。
java.sql.Connectionにはトランザクションを制御するための次のメソッドを提供します:
公共 ボイドにsetAutoCommit(ブール値)//設定が自動的に提出され、true(デフォルト値)に自動的に偽の提出に必要な手動に代わって、代わって提出した 公共 空間を(コミット)//トランザクションコミット 公共 ボイド ROLLBACKを()//トランザクションをロールバック
JDBC操作プロセス:1)JDBC接続2)ステートメントSQL 3)プリコンパイルされたSQL 4)SQLを実行取得5)処理結果6)結果セット7)発売statemen 8)9トランザクションをコミットを放出する)を設定し、処理例外ロールバック10)が解放さJDBC接続
2、JTAトランザクション:JTAは、三つの主要なインターフェイスを有しています。
UserTransaction:、アプリケーションがトランザクションの開始を制御するために聞かせて、保留中、コミット、ロールバックなど。
トランザクションマネージャー:国政を管理するためのアプリケーションサーバ。
トランズアクションインターフェース:関連するトランザクション操作の実施のため。
3、春はorg.springframework.transaction.PlatformTransactionManagerで直接業務を管理しませんが、実装するのに勝ったJTAを休止する委託業務の責任を管理しますトランザクションマネージャ、さまざまなを提供するために、インタフェーススプリングトランザクションを管理します
(1)ばねJDBC
< ビーンID = "のTransactionManager" クラス= "org.springframework.jdbc.datasource.DataSourceTransactionManager" > < プロパティ名= "データソース" REF = "データソース" /> </ 豆>
(2)業務を休止
1 < ビーンID = "のTransactionManager" クラス= "org.springframework.orm.hibernate3.HibernateTransactionManager" > 2 < プロパティ名= "のSessionFactory" REF = "のSessionFactory" /> 3 </ 豆>
(3)Javaの永続API総務を(JPA)
1 < ビーンID = "のTransactionManager" クラス= "org.springframework.orm.jpa.JpaTransactionManager" > 2 < プロパティ名= "のSessionFactory" REF = "のSessionFactory" /> 3 </ 豆>
第四に、不動産取引
読み取り専用かどうかをコミュニケーション行動、検疫ルール、ルールをロールバックするには、トランザクションのタイムアウト、
1 パブリック インターフェースTransactionDefinition { 2 INT getPropagationBehavior(); // 戻りトランザクション伝搬挙動 3。 INT getIsolationLevel(); // さらに、そのトランザクション・マネージャに基づいてトランザクション分離レベルは、このトランザクションで見ることができるトランザクションを制御返しデータ 4。 INT getTimeout(); //は、トランザクションが秒数以内に完了しなければならない戻り 5。 ブール IsReadOnlyの(); // トランザクションが読み取り専用であることを保証するために、トランザクションが読み取り専用され、トランザクション・マネージャは、戻り値に応じて最適化することができる 6 }
通信動作の7種類:
* PROPAGATION_REQUIRED:既にトランザクションがある場合トランザクションが、新しいトランザクションを作成しない場合は、このトランザクションに追加。これは、最も一般的な選択です。
PROPAGATION_SUPPORTS:現在のトランザクションのサポート、何のトランザクションが非トランザクションの方法で実行されていない場合。
PROPAGATION_MANDATORY:現在のトランザクションのサポートは、トランザクションなしている場合、例外をスローします。
* PROPAGATION_REQUIRES_NEW:現在のトランザクションが存在する場合は、新しいトランザクション、現在のトランザクションが保留中。
PROPAGATION_NOT_SUPPORTED:現在のトランザクションが存在する場合は、非トランザクションウェイに操作を実行し、保留中の現在のトランザクションを置きます。
PROPAGATION_NEVER:現在のトランザクションが存在する場合は、例外がスローされ、非トランザクションの方法を実行します。
分離レベルの4種類:
- 直列化(シリアライズ):実行中のトランザクションが完全にデータベースに対して行われた他のトランザクション未満を更新しました。
- 反復可能読み取り(反復可能読み取り):実行中のトランザクションが提出されている新たに挿入されたレコードその他の事項を確認することができますが、他のトランザクションが既存のレコードを更新見ることができません。
- コミットを読む(送信されたデータを読み込む):実行中のトランザクションが提出された新たに挿入されたレコードその他の事項を参照してください、だけでなく、提出されたその他の事項の既存のレコードの更新を見ることができます
- Uncomittedを読む(非コミット読み取り):実行中のトランザクションが提出されていない、新たに挿入されたレコードその他の事項を拷問することができ、及び提出されていない他の事項の既存のレコードの更新を見ることができます。
分離レベルが高いほど、より多くの我々は、データの整合性と一貫性を確保することができますが、同時パフォーマンスへの影響も大きいです。ほとんどのアプリケーションでは、あなたはそれがダーティリードを避けるだけでなく、優れた同時性能を有することができ、コミットを読むために分離レベルを優先するために、データベース・システムを持つことができます。それは、非反復読み取りにつながる、とファントムは、このような問題が発生する可能性があり、個々の場合において、これらの第二のクラス失われた更新の同時実行の問題を読み取るが、アプリケーションを制御するために排他的ロックまたはオプティミスティック・ロックを使用して作製することができます。