Java @Transactional
7708 ワード
📌 1. @Transactional
📎 Transactionとは?
👉DB関連のロケーションでTransactionについて議論したことがあります(クリック)👈データベースで使用される用語.トランザクションとは、データベース管理システムまたは同様のシステムでステータスを変更するために実行される操作の単位を指す.
👉 Transaction 특징
📎 @旅行とは何ですか。
@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 {
}
📖 リファレンス
@Transactional(isolation=Isolation.DEFAULT)
public void addUser(UserDTO dto) throws Exception {
}
@Transactional(propagation=Propagation.REQUIRED)
public void addUser(UserDTO dto) throws Exception {
}
@Transactional(noRollbackFor=Exception.class)
public void addUser(UserDTO dto) throws Exception {
}
@Transactional(rollbackFor=Exception.class)
public void addUser(UserDTO dto) throws Exception {
}
@Transactional(timeout=10)
public void addUser(UserDTO dto) throws Exception {
}
@Transactional(readonly = true)
public void addUser(UserDTO dto) throws Exception {
}
Reference
この問題について(Java @Transactional), 我々は、より多くの情報をここで見つけました https://velog.io/@alicesykim95/Java-Transactionalテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol