スプリングトランザクション異常をどのように処理しますか?

Springにおけるトランザクション異常時のロールバック処理方法は、以下のように複数あります。

  1. 通常、Springのトランザクションマネージャは、キャッチされないRuntimeExceptionまたはErrorが発生したらトランザクションをロールバックします。つまり、メソッドの呼び出しが終了する時点でRuntimeExceptionまたはErrorがスローされると、トランザクションは自動的にロールバックされます。
  2. 特定の例外が発生したときにトランザクションをロールバックするように、@TransactionalアノテーションのrollbackFor属性を使用できます。たとえば、@Transactional(rollbackFor = Exception.class)は、Exception例外が発生したときにトランザクションをロールバックします。
  3. try-catch文で例外をキャッチし、catchブロック内でTransactionAspectSupport.currentTransactionStatus().setRollbackOnly()メソッドを手動で呼び出してトランザクションをロールバックします。例:
@Transactional
public void someMethod() {
    try {
        // 业务逻辑
    } catch (Exception e) {
        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
        throw e;
    }
}
  1. tx:advice
  2. 翻訳native は日本語で1つのオプションのみが必要: tx:method
<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="*" rollback-for="Exception"/>
    </tx:attributes>
</tx:advice>

なお、上記のアプローチはあくまでSpringトランザクションマネージャで管理されるトランザクションに適用するものです。JTA(Java Transaction API)を利用して、分散型トランザクション管理を行う場合には、具体的なJTAの実装方式に応じて、異常時のロールバック処理を行う必要があります。

bannerAds