Type | Description | |
---|---|---|
String | 使用するトランザクション マネージャーを指定するオプションの修飾記述子 | # #propagation |
オプションのトランザクション伝播動作設定 | isolation | |
オプションのトランザクション分離レベル設定 | readOnly | |
読み取り/書き込みまたは読み取り専用トランザクション、デフォルトは読み取り/書き込み | timeout | |
トランザクション タイムアウト設定 | rollbackFor | |
トランザクション ロールバックを引き起こす例外クラスの配列 | rollbackForClassName | |
トランザクション ロールバックを引き起こす例外クラス名の配列 | noRollbackFor | |
Exception クラス配列から継承する必要があります。トランザクション ロールバックは発生しません | noRollbackForClassName | |
トランザクション ロールバックを発生させない例外クラス名の数 | #@Transactional |
デフォルトでは、@Transaction を使用してトランザクションを処理する場合、Spring フレームワークは
でのみ実行をスローします。トランザクションは、例外と例外が発生した場合にのみロールバックされます。 未チェック例外
が発生します。つまり、RuntimeException またはそのサブクラスのインスタンスがスローされると、トランザクション メソッドからスローされたチェック例外はトランザクション ロールバックのマークが付けられません。チェックされた例外をロールバックさせます。メソッド全体の前に @Transactional(rollbackOn=Exception.class)
を追加します #未チェックの例外がロールバックされないようにします:
@Transactional(dontRollbackOn=RunTimeException.class)
トランザクション管理を必要としないメソッド (クエリのみ):
@ Transactional(propagation=Propagation.NOT_SUPPORTED)
Note
例外が try-catch の場合トランザクションをロールバックしたい場合は、try{}catchthrow Exception}
をスローする必要があります。Spring チームは、クラスが実装したいインターフェイスではなく、特定のクラス (またはクラス メソッド) で @Transactional アノテーションを使用することを推奨しています。インターフェイスで @Transactional アノテーションを使用することもできますが、この場合、インターフェイス ベースのプロキシを設定する必要がある場合にのみ有効になります。
@Slf4j @Service public class MemberService { @Autowired private MemberMapper memberMapper; @Transactional public Integer insert(MemberEntity memberEntity) { Integer insertResult = 0; try { insertResult = memberMapper.save(memberEntity); log.info("insertResult:{}", insertResult); int result = 1 / memberEntity.getAge(); } catch (Exception e) { log.error("errorMsg:{}", e.getMessage()); //回滚 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); } return insertResult; } }
以上がJava @Transactional を使用してロールバック条件を指定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。