Spring の @Transactional アノテーションは、アプリケーション内のトランザクションを管理する際に重要な役割を果たします。これは、分離と伝播という 2 つの必須パラメータを定義します。
伝播は、トランザクションが既存のトランザクションとどのように対話するかを決定します。主なオプションは次のとおりです:
デフォルト値は REQUIRED で、ほとんどの状況に適しています。
分離は、トランザクション間のデータ可視性ルールを定義します。いくつかのレベルが利用可能です:
最適な分離レベルは、アプリケーションの特定のニーズによって異なります。
次の場合はデフォルト値の変更を検討してください。
ダーティ リードは、スレッド 1 が値 (x) を書き込み、スレッド 2 がコミットされる前に値 (x) を読み取るときに発生します。スレッド 1 が変更をロールバックすると、スレッド 2 は不正な値を保持することになります。
ダーティ リードを防ぐために、分離を ISOLATION_READ_COMMITTED または ISOLATION_REPEATABLE_READ に設定できます。これにより、スレッド 2 がコミットされた値または一貫性のあるスナップショットのみを読み取ることが保証されます。
次のコード スニペットを考えてみましょう:
<code class="java">@Transactional(propagation=Propagation.REQUIRES_NEW) public void provideService() { // Code that requires a new transaction }</code>
伝播を REQUIRES_NEW に設定すると、周囲のトランザクション コンテキストに関係なく、provideService() に入るときに新しいトランザクションが常に作成され、終了時にコミットされます。
以上が@Transactional の分離と伝播は Spring アプリケーションにどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。