2017-10-17 17 views
1

伝播の設定は必須です。春に管理される取引@取引注釈

@Transactional(propagation = Propagation.REQUIRED) 

トランザクションは読み書き可能です。

これらはどのシナリオで使用されていますか?私に例を挙げて説明してください。

答えて

0

春のトランザクションのデフォルトですから、伝播プロパティを指定する必要はありません

@Transactional(propagation = Propagation.REQUIRED) 

です。

したがって、スプリングコンポーネントのアノテーションとは、どういう意味ですか?@Transactional

  • Springフレームワークは、新しいトランザクションを開始し、すべてのメソッドを実行し、最終的にトランザクションをコミットします。

  • しかし、application contextにトランザクションが存在しない場合、スプリングコンテナは新しいトランザクションを開始します。

  • 複数のメソッドがPropagation.REQUIREDとして設定されている場合、論理的にそれぞれのメソッドにネストされた方法で割り当てられたトランザクション動作は、すべて同じ物理トランザクションの下にあります。

結果はどうなりますか?
結果は、ネストされたトランザクションが失敗した場合、コミットの代わりにトランザクション全体が失敗し、ロールバックされます(dbに値を挿入しません)。

例:

@Service 
public class ServiceA{ 

    @Transactional(propagation = Propagation.REQUIRED) 
    public void foo(){ 
     fooB(); 
    } 

    @Transactional(propagation = Propagation.REQUIRED) 
    public void fooB(){ 
     //some operation 
    } 

} 

説明:この例では トランザクション動作を割り当てfoo()方法、またトランザクションであると呼ばれるfoo()内部別の方法fooB()fooB()は、foo()というネストされたトランザクションとして動作します。何らかの理由でfooB()が失敗すると、foo()もコミットに失敗しました。むしろロールバックする。

0

このアノテーションは、Springフレームワークがデータベーストランザクションを管理するのを助けるためのものです。

は、あなたがここで

@Transactional(propagation = Propagation.REQUIRED) 

を使用し、あなたのデータベースへの書き込みサービスBeanを持っていて、書き込みがトランザクション内で行われていることを確認するとしましょう春のサービスBeanの小さな一例です。

  • トランザクション内で実行されるようにを必要このサービスメソッド:

    @Service 
    class MyService { 
    
        @Transactional(propagation = Propagation.REQUIRED) 
        public void writeStuff() { 
    
         // write something to your database 
        } 
    } 
    

    Transactional注釈は春を告げます。

  • サービスメソッドの実行中に例外がスローされると、Springはトランザクションをロールバックし、データはデータベースに書き込まれません。
関連する問題