@Transactional(rollbackFor)

@Transactionalノートは2が、1が設けられたバネである @org.springframework.transaction.annotation.Transactional 他は、JDKのご提供です @javax.transaction.Transactional ロールバックのセットアップでは、春はそれを提供 rollbackFor することを提供するJDK、 rollbackOn 使用方法に一貫しています。
パフォーマンスの私の限られたテストでは、これら2つのノートは同じです。

使用する場所

@Transactionalいずれかの方法で書き込むことができるノートには、クラスに書き込むことができます。クラスに書かれたそのクラスのすべてのpublicメソッドは、業務を持っています。このような方法は、より良いアプローチは、あなたがトランザクションを追加する方法にマークされているので、明らかに、トランザクションを生成するトランザクションを必要としません@Transactional

rollbackFor

@Transactionalトリガーは、あなたが複数指定することができ、トランザクション・ロールバックのrollbackFor例外タイプを指定するために使用することができ、カンマで区切って指定します。
rollbackForデフォルト値はのRuntimeExceptionとエラーを含め、UncheckedExceptionです。
私たちが直接使用する場合@Transactionalは指定しないrollbackFor例外とそのサブクラスは、ロールバックをトリガしないとき、。

パブリック クラス BusinessExceptionは延び例外{
     公共BusinessException(文字列MSG){
         スーパー(MSG)を、
    } 
}
@Autowired
     プライベートUserRepository userRepository。
    
    // 不回滚
    @Transactional
     公共 ボイド TEST1()スロー例外{ 
        ユーザーユーザー = 新しいユーザ(1、 "150億"、 "d243ewa"、 "コンマ"を)。
        saveUser(ユーザ)。
        スロー 新しい例外(「test1のエラーを」); 
    } 

    // 不回滚
    @Transactional
     公共 ボイド test11()はスロー例外{ 
        ユーザーユーザー = 新しいユーザ(1、 "150億"、 "d243ewa"、 "コンマ"を
        saveUser(ユーザ)。
        スロー 新しい BusinessException( "test11エラー" ); 
    } 

    // 回滚 
    @Transactional(rollbackOn =例外クラス公共 ボイド TEST2()はスロー例外{ 
        ユーザーユーザー = 新しいユーザ(1、 "150億"、 "d243ewa"を、 "コンマ" )。
        saveUser(ユーザ)。
        スロー 新しい例外(「TEST2エラー」); 
    } 

    // 回滚 
    @Transactional(rollbackOn =例外。クラス公共 ボイド test21()スロー例外{ 
        ユーザーユーザー = 新しいユーザ(1、 "150億"、 "d243ewa"、 "コンマ" )。
        saveUser(ユーザ)。
        スロー 新しい BusinessException( "test21エラー" ); 
    } 

    // 回滚
    @Transactional
     公共 ボイドTEST3(){ 
        ユーザーユーザー = 新しいユーザ(1、 "150億"、 "d243ewa"、 "コンマ" )。
        saveUser(ユーザ)。
        スロー 新しいのRuntimeException( "TEST3ランタイムエラーを" );

    
 スロー例外{ 
        ユーザーユーザ = 新しいユーザー(1、「150億」、「d243ewa」、「コンマ」)。
        test41(ユーザ)。
        スロー 新しい例外(「TEST4エラー」); 
    } 

    @Transactional(rollbackOn =例外。クラス公共 ボイドtest41(ユーザユーザ){ 
        saveUser(ユーザ)。
    } 

    // 不回滚
    公共 ボイド TEST5()スローBusinessException { 
        TEST6を(); 
    } 

    // 回滚 
    @Transactional(rollbackOn =例外。クラス公共 ボイド TEST6()はスローBusinessException { 
        ユーザーユーザー = 新しいユーザ(1 "150億"、 "d243ewa"、 "コンマ" )。
        saveUser(ユーザ)。
        スロー 新しい BusinessException( "TEST6エラー" ); 
    } 

    // 回滚 
    @Transactional(rollbackOn =例外クラス公共 ボイド TEST7()はスローBusinessException { 
        TEST8を(); 
    } 

    公共 ボイド TEST8()スローBusinessException { 
        ユーザーユーザー =を新しいユーザー(1、 "150億"、 "d243ewa"、 "カンマ" ); 
        saveUser(ユーザ)。
        スロー 新しい BusinessException( "TEST8エラー" ); 
    } 

    パブリックユーザsaveUser(ユーザユーザ){
         リターンuserRepository.save(ユーザ)。
    }

サービスコールで間接法におけるもう一つ注意すべきは、業務をトリガしません

おすすめ

転載: www.cnblogs.com/qingmuchuanqi48/p/11832252.html