@Serviceと@Transactionalについて勉強しましたので書きます。
@Service
Service layerで使用されるAnnotationで、これを使用することで、該当のクラスがService layerクラスであることを明確にする
@Transaction
クラスやメソッドに貼り付け、該当範囲内のメソッドがTxになることを意味する
属性
-
propagation:Txの境界(Boundary)を設定する方法を指定
① REQUIRED - Txが実行中であれば参加、実行中でなければ「新しいTx」を開始
② REQUIRES_NEW - Txが実行しているかどうかにかかわらず「新しいTx」を開始
③ NESTED - Txが実行中であればそのTxの内部に「subTx」を開始
新しいTxの開始ではないことが① 、②との違い
④ MANDATORY - 必ず実行中のTx内でのみ実行可能で、そうでなければ例外発生
⑤ SUPPORTS - Txが実行中であるかどうかにかかわらず実行
⑥ NOT_SUPPORTED - Txなしで処理。Txが実行中の場合、しばらく中断(suspend)
⑦ NEVER - Txなしの処理。Txが実行中の場合、例外発生 -
isolation:Txのisolation levelを指定
-
readOnly:Txがデータを読み取るのみの場合、trueに指定するとパフォーマンスが向上
-
rollbackFor:指定された例外が発生したときにTxをrollback。
例外的に、RuntimeExceptionとErrorは自動ロールバック -
norollbackFor:指定された例外が発生してもTxをrollbackしない
-
timeout:指定された時間(秒)以内にTxが終了しない場合、Txを強制終了させる