ホームページ > Java > &#&チュートリアル > Java @Transactional を使用してロールバック条件を指定する方法

Java @Transactional を使用してロールバック条件を指定する方法

WBOY
リリース: 2023-04-20 10:04:11
転載
1414 人が閲覧しました

例外の分類

Java @Transactional を使用してロールバック条件を指定する方法

  • ##チェックされた例外: RuntimeException を除く例外の下の例外

  • 未チェックの例外: RuntimeException およびそのサブクラスとエラー (エラー)

@トランザクション アノテーション属性の詳細

##Attributevalue# #propagationenum: 伝播オプションのトランザクション伝播動作設定isolationenum: 分離オプションのトランザクション分離レベル設定readOnlyboolean読み取り/書き込みまたは読み取り専用トランザクション、デフォルトは読み取り/書き込みtimeoutint (秒単位)トランザクション タイムアウト設定 rollbackForクラスの配列オブジェクトは、Throwable から継承する必要があります。トランザクション ロールバックを引き起こす例外クラスの配列rollbackForClassNameクラス名の配列。Throwable から継承する必要がありますトランザクション ロールバックを引き起こす例外クラス名の配列noRollbackForクラス オブジェクト配列は、ThrowableException クラス配列から継承する必要があります。トランザクション ロールバックは発生しませんnoRollbackForClassNameクラス名配列。Throwable から継承する必要がありますトランザクション ロールバックを発生させない例外クラス名の数#@Transactional#@Transaction アノテーションを使用すると、Ali The Baba コード仕様プラグインは、ロールバックを表示するには rollbackFor を指定する必要があることを通知します。
Type Description
String 使用するトランザクション マネージャーを指定するオプションの修飾記述子

デフォルトでは、@Transaction を使用してトランザクションを処理する場合、Spring フレームワークは

でのみ実行をスローします。トランザクションは、例外

と例外が発生した場合にのみロールバックされます。 Java @Transactional を使用してロールバック条件を指定する方法未チェック例外

が発生します。つまり、RuntimeException またはそのサブクラスのインスタンスがスローされると、トランザクション メソッドからスローされたチェック例外はトランザクション ロールバックのマークが付けられません。

チェックされた例外をロールバックさせます。メソッド全体の前に @Transactional(rollbackOn=Exception.class)

  • を追加します #未チェックの例外がロールバックされないようにします: @Transactional(dontRollbackOn=RunTimeException.class)

  • トランザクション管理を必要としないメソッド (クエリのみ): @ Transactional(propagation=Propagation.NOT_SUPPORTED)

  • Note

    :

例外が try-catch の場合トランザクションをロールバックしたい場合は、try{}catchthrow Exception}

をスローする必要があります。
  • Spring チームは、クラスが実装したいインターフェイスではなく、特定のクラス (またはクラス メソッド) で @Transactional アノテーションを使用することを推奨しています。インターフェイスで @Transactional アノテーションを使用することもできますが、この場合、インターフェイス ベースのプロキシを設定する必要がある場合にのみ有効になります。

  • @Transactional アノテーションはメソッドを識別します. 処理プロセスはできるだけ単純にすることをお勧めします。特にロックを伴うトランザクション メソッドの場合は、回避できる場合はトランザクションに配置しないことが最善です。通常のデータベース クエリ操作はトランザクションの前に配置でき、追加、削除、変更などの操作はトランザクション

  • code

    @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;
        }
    }
    ログイン後にコピー

    に配置できます。赤いコードで示されているように、これを書かないとトランザクションはロールバックされません。トランザクションは catch によってキャッチされるため、トランザクションは手動でのみロールバックできます。

以上がJava @Transactional を使用してロールバック条件を指定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート