伝播の設定は必須です。春に管理される取引@取引注釈
@Transactional(propagation = Propagation.REQUIRED)
トランザクションは読み書き可能です。
これらはどのシナリオで使用されていますか?私に例を挙げて説明してください。
伝播の設定は必須です。春に管理される取引@取引注釈
@Transactional(propagation = Propagation.REQUIRED)
トランザクションは読み書き可能です。
これらはどのシナリオで使用されていますか?私に例を挙げて説明してください。
春のトランザクションのデフォルトですから、伝播プロパティを指定する必要はありません
@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()
もコミットに失敗しました。むしろロールバックする。
このアノテーションは、Springフレームワークがデータベーストランザクションを管理するのを助けるためのものです。
は、あなたがここで
@Transactional(propagation = Propagation.REQUIRED)
を使用し、あなたのデータベースへの書き込みサービスBeanを持っていて、書き込みがトランザクション内で行われていることを確認するとしましょう春のサービスBeanの小さな一例です。
@Service
class MyService {
@Transactional(propagation = Propagation.REQUIRED)
public void writeStuff() {
// write something to your database
}
}
Transactional
注釈は春を告げます。