[ばね]Transaction


Transactionとは?


  • 英語辞典:取引、売買、処理(プロセス)

  • DBMSが実行するタスクの単位

  • コントローラ内のビジネスロジックは、トランザクション・ユニット内のサービスに移行できます.

  • 単一クエリーは、解決できない論理を処理するために必要な概念です.
    単一のクエリでは解決できない論理とは?
    例えば、ショッピングモールで商品を購入する過程が論理的に処理されていることを想像してみてください.
  • 会員の残額が十分かどうかを確認します.
  • 残高が商品価格より高いことを確認します.
  • 商品に在庫があるか確認
  • 会員の残額を商品価格で
  • 減少する
  • 終了
  • この過程で例外が発生する可能性があり,商品がない,あるいは残額が減少した瞬間にサーバの電源が切れて商品が購入され,会員の残額も減少しないと考えられる.
    これらの問題を解決するために,伝送技術が現れた.
    ソース:https://mangkyu.tistory.com/50

    でんそうぎじゅつ


    Transactionは、2つ以上のクエリーを組み合わせて1つの接続をDBに送信します.このプロセスでエラーが発生すると、すべてのプロセスが自動的に元の状態に戻ります.このプロセスを実装するために、Transactionは、1つまたは複数のクエリーを処理するときに同じ接続オブジェクトを共有する必要があります.

    ソース:https://mangkyu.tistory.com/50

    Transactionの性質

  • 原子性:1つのトランザクション内で実行される操作は1つとみなされます.すなわち、すべて成功またはすべて失敗した.
  • 一貫性:トランザクションは一貫したDB状態を維持します.(データ整合性等を満たす)
  • 独立性:相互に影響しないように、同時に実行されるトランザクションを分離する必要があります.
  • 持続性:Transactionが正常に完了した後、結果は常に保存する必要があります.
  • ソース:https://goddaehee.tistory.com/167

    スプリングとTransaction

  • スプリングにおいて、@transactionalをAnnotation方式で宣言する使用方法は、通常、宣言伝達と呼ばれる.
  • クラスまたは方法の上に@Transactionalを追加することができる.追加すると、クラスにTransaction機能が適用されたプロキシオブジェクトが作成されます.
  • このエージェント・オブジェクトは、@Transactionalを含むメソッドのみを呼び出し、PlatformTransaction Managerを使用してトランザクションを開始し、CommitまたはRollbackを正常に起動するかどうかに応じて起動します.
  • ソース:https://goddaehee.tistory.com/167

    スプリングにTransactionを使う


    スプリングは、コードベースのトランザクションと宣言トランザクションをサポートします.Springが提供するTransactionテンプレートクラスを使用するか、プロファイルAnnotaionを使用してTransactionの範囲とルールを定義できます.Springは主にDeclarative Transactionをサポートし、<tx:advice>ラベルまたは@Transactional言語宣言を使用します.クエリ文の処理中にエラーが発生すると、ロールバック処理が自動的に実行されます.
    ソース:https://mangkyu.tistory.com/50
    通常、springはサービスレイヤーに@Transactionalを追加してトランザクションを行います.次の例は、ショップ関連のサービスセクションであり、データのみをクエリーするselectメソッドでは@Transactionalは使用されませんが、値を追加、変更または削除するinsert、updateおよびdeleteメソッドには@Transactionalが追加され、Transactionを設定します.
    public interface StoreService {
    
        List<StoreVO> selectStoreInfoList(StoreVO storeVO);
    
        StoreVO selectStoreInfo(StoreVO storeVO);
    
        @Transactional
        int insertStoreInfo(StoreVO storeVO);
    
        @Transactional
        int updateStoreInfo(StoreVO storeVO);
    
        @Transactional
        int deleteStoreInfo(StoreVO storeVO);
    
    }
    n.問題
    だから今使っている方法は上記のように接続されていますか?
    ソース:https://mangkyu.tistory.com/50
    ソース:
    https://goddaehee.tistory.com/167
    https://mangkyu.tistory.com/50