@Transactionalノートは2が、1が設けられたバネである
パフォーマンスの私の限られたテストでは、これら2つのノートは同じです。
@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(ユーザ)。 }
サービスコールで間接法におけるもう一つ注意すべきは、業務をトリガしません