Java @Transactional


📌 1. @Transactional


📎 Transactionとは?


👉DB関連のロケーションでTransactionについて議論したことがあります(クリック)👈データベースで使用される用語.トランザクションとは、データベース管理システムまたは同様のシステムでステータスを変更するために実行される操作の単位を指す.
👉 Transaction 특징
  • begin、コミットを自動的に実行します.
  • 異常が発生した場合、ロールバック処理が自動的に実行されます.
  • 伝送は4つの性質を有する原子性、一貫性、隔離性、持続性
  • 📎 @旅行とは何ですか。

    @Transactionalは、クラス、メソッド、およびインタフェースに追加されて使用され、その範囲内のメソッドがトランザクションになることを保証します.すなわち、メソッドは、メソッドが終了する前に、干渉やその他の変化を反映しないオブジェクト(単位)と見なされる.これは、オブジェクトを直接作成する必要がなく、宣言だけで管理を簡素化できるため、선억적 트랜잭션とも呼ばれます.

    📎 @なぜTransactionalを使うのですか?


    Mybatis規格に従ってServiceからMapperまで複数のSQLクエリーを処理中にエラーが発生した場合は、データベースに反映する前に実行したSQLクエリーをロールバックする必要があります.したがって、@Transactional構文を使用すると、ビジネスロジックからデータベースへのSQLクエリー処理中にjava.lang.RuntimeExceptionエラーが発生し、トランザクションがロールバックされます.

    📌 2.旅行オプション


    📎 Isolation


    Transactionで一致しないデータ許可レベルを設定します.デフォルト以外の4つのレベルのデータ許可レベルを設定できます.
    @Transactional(isolation=Isolation.DEFAULT)
    public void addUser(UserDTO dto) throws Exception {
    
    }
    👉 DEFAULT:デフォルト
    👉 READ_UNCOMMITED (level0):コミットされていないデータの読み取りを許可
    👉 READ_COMMITED (level1):コミットされたデータの読み取りを許可
    👉 REPEATEABLE_READ (level2):同じフィールドに複数アクセスした結果は同じです.
    👉 SERIALIZABLE (level3):最も隔離度が高く、パフォーマンスが低下する可能性があります

    📎 Propagation


    トランザクション・オペレーション中に他のトランザクションを呼び出すときに、処理方法のオプションを指定します.
    @Transactional(propagation=Propagation.REQUIRED)
    public void addUser(UserDTO dto) throws Exception {
    
    }
    👉 REQUIREDデフォルトでは、処理中のトランザクションがある場合は、そのトランザクションのプロパティに従います.ない場合は、新しいトランザクションを作成します.
    👉 REQUIRED_NEW常に新しいトランザクションが生成されます.すでに進行中のトランザクションがある場合は、トランザクションを一時的に保持し、トランザクション操作を先に行います.
    👉 SUPPORTすでに処理中のトランザクションがある場合は、そのトランザクションのプロパティに従います.ない場合は、トランザクションは設定されません.
    👉 NOT_SUPPORT処理中のトランザクションがある場合は、トランザクションを実行せずにトランザクションを保持します.
    👉 MANDATORYタスクを実行できるのは、すでに進行中のトランザクションのみです.なければExceptionが発生します.
    👉 NEVERトランザクションが処理されていないときにアクションを実行します.トランザクションがある場合は、Exceptionが生成されます.
    👉 NESTED処理中のトランザクションがある場合はネストされたトランザクションが実行され、存在しない場合はREQUIRDと同じです.

    📎 noRollbackFor


    特定の異常が発生した場合はロールバックしません.
    @Transactional(noRollbackFor=Exception.class)
    public void addUser(UserDTO dto) throws Exception {
    
    }

    📎 RollbackFor


    特定の例外でロールバックを実行します.
    @Transactional(rollbackFor=Exception.class)
    public void addUser(UserDTO dto) throws Exception {
    
    }

    📎 Timeout


    指定した時間内にメソッドの実行が完了しない場合は、ロールバックします.(-1の場合はtimeoutを使用しません)
    @Transactional(timeout=10)
    public void addUser(UserDTO dto) throws Exception {
    
    }

    📎 ReadOnly


    トランザクションを読み取り専用に設定します.ReadOnlyのデフォルト値はfalseですが、trueに設定したときにinsert、update deleteを実行中に異常が発生しました.主に3種類のクエリー文を使用します.特定のトランザクション・タスクで書き込みが行われないようにするためにも使用します.
    @Transactional(readonly = true)
    public void addUser(UserDTO dto) throws Exception {
    
    }

    📖 リファレンス

  • https://developsd.tistory.com/129
  • https://bcp0109.tistory.com/322
  • https://devkingdom.tistory.com/287
  • https://kafcamus.tistory.com/30
  • 👉最も参考になるプレゼンテーション(クリック)👈