Spring事務管理+SpringBootにおける事務コードの実現


Springにおける事務管理についての理解を話す.
憧れの授業網の中の授業を結び付けて、Springのことを話しに行きます.
Springの事務管理は、Platform Transation Manager、Transation Definition、Transation Stationの三つの重要なインターフェースを提供しています.
それぞれ紹介しますが、Platform Transation ManagerはSpringが事務のために提供するプラットフォーム事務マネージャで、Spring事務はすべてこのインターフェースまたはこのインターフェースの実現類に依存しています.いくつかの私たちがよく使う実現類は、DataSourceTransactionager(Jdbcでの事務管理)、Jtant Transactionager(Jta事務管理)、Weblogic Jta Transactionager(一般的なJpa事務管理)、Hiberga Transactionager(Hiberner事務管理)などがあります.
次いで、Transaction Definition(トランザクション定義器)インターフェースであり、このインターフェースは主に、トランザクションのPropagation(伝播挙動)、Isolation(分離レベル)、Timeout(タイムアウト)、およびreadOnly(読み取り専用)を定義している.ここでは、事務の伝播行為と隔離レベルの知識について話します.
    1、伝播行為、Spring事務管理における伝播行為はPROPAAGATION_があります.REQUIRED、PROPAAGATION_REQUIRES_NEW、    PROPAAGATION_SUPPORT、PROPAAGATION_MANDATORY、PROPAAGATION_NOT_SUPPORT、PROPAAGATION_NEVER、PROPAAGATION_NESTEP
PROPAAGATION_REQUIRED:現在のトランザクションをサポートします.現在のトランザクションが存在しない場合は新しいものを作成します.これはSpringのデフォルトの選択です.
PROPAAGATION_REQUIRES_NEW:現在のトランザクションはサポートされていません.現在のトランザクションがあれば保留し、新しいトランザクションを使って実行します.二つのトランザクションの間には関係ありません.
PROPAAGATION_SUPPORT:現在の事務をサポートしています.現在の事務が存在しない場合、非事務で実行します.
PROPAAGATION_MANDATORY:現在の事務をサポートしていますが、現在の事務が存在しない場合、異常を投げます.
PROPAAGATION_NOT_SUPPORT:現在の事務をサポートしていません.現在の事務があれば、事務を保留し、非事務で実行します.
PROPAAGATION_NEVER:現在の事務に対応していません.現在の事務があれば、異常を投げます.
PROPAAGATION_NESTEP:イベントのトランザクションが存在すると、ネストされたトランザクションで実行されます.イベントトランザクションがない場合は、REQUID属性で実行されます.これは単独の事務を使っています.この事務はロールバックできる保存点が複数あります.内部事務のロールバックは外部事務に影響を与えません.DataSourceTransation Manager事務マネージャだけに効果があります.
2、事務の隔離レベル
Springトランザクションには5つの隔離レベルがあり、4つの対応データベースの4つの隔離レベル、もう一つはデフォルトの隔離レベルであり、データベースタイプに応じて適応する.
ISO LATION_DEFAULT:デフォルト隔離レベル、Oracleデータベースの場合、デフォルトはISO LATION_です.READ_COMMITED、mysqlなら、デフォルトはISO LATIONです.REPEATABLE_READ
ISO LATION_READ_UNCOMMITED:読み-提出しないと、汚い読み、繰り返してはいけない読み、幻読みにつながる可能性があります.
ISO LATION_READ_COMMITED:読み-提出は、汚れを防ぐことができますが、繰り返しや幻読みができない可能性があります.
ISO LATION_REPEATABLE_READ:繰り返し-読むことができます.この方法では、汚れや読み返しを防ぐことができますが、幻読みの可能性があります.
ISO LATION_SERIALIZABLE:シリアルはシリアル方式で実行します.価格は高いですが、汚れを防ぐことができます.
何が汚いかについては、繰り返し読んではいけません.
汚い読み:現在の事務で読み取られたデータは他の事務で未提出のもので、他の事務がロールバックした場合、現在の事務で読み取られているデータは汚いデータです.
繰り返して読んではいけません.同じ事務で何度も読み取ったデータが一致しないということです.現在の事務で読み取ったデータは他の事務によって修正されました.現在の事務でデータを処理すると、データとデータベースのデータが一致しないことが分かります.
幻読み:現在の事務が連続して何回も同じ作業を行い、得られたデータの数が一致しないこと.横向きのものは追加と削除です.
Transaction Definitionインターフェースでは、現在のトランザクション伝播挙動と隔離レベルを取得する方法も提供される.
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package org.springframework.transaction;

import org.springframework.lang.Nullable;

public interface TransactionDefinition {
    .....
    //      
    int getPropagationBehavior();
    //      
    int getIsolationLevel();
    //         
    int getTimeout();
    //      
    boolean isReadOnly();

    @Nullable
    String getName();
}
最後にTransaction Stortsインターフェースであり、このインターフェースは現在のトランザクション状態を取得するためのいくつかの方法を提供する.
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package org.springframework.transaction;

import java.io.Flushable;

public interface TransactionStatus extends SavepointManager, Flushable {
    //       
    boolean isNewTransaction();
    //       
    boolean hasSavepoint();
    //        
    void setRollbackOnly();
    //      
    boolean isRollbackOnly();
    //                ,       Hibernate/JPA   ,    JDBC     
            ;
    void flush();
    //        
    boolean isCompleted();
}
 
Springの事務管理に関する知識はもう大体分かりました.Springの事務分類方式は様々な種類があります.
次の項目はSpringトランザクションに対してプログラミング式と三つの声明式を用いて実現され、セルテストに合格しました.具体的に実現するために必要な学生はコードを研究しに行きましょう.ここでは詳しく説明しません.
具体的な実現コード:https://github.com/tiedungao/transaction