Spring構成におけるtransactionAttributesの使い方の紹介
2507 ワード
最近この問題が発生し、springが提供するJpaTemplateを使用してクエリーを行う場合、データ量が100個を超えるとクエリー効率が著しく低下します.最初はJPA内部の双方向関連を使用していたため,各エンティティの内部関連が多すぎて,すべての操作に影響を及ぼすため,JPAの関連関係によるものと疑われる.しかし,関連関係を取り除いた後の効果は顕著ではなかった.
スプリングの関連構成を検索すると、「transactionAttributes」に問題があることがわかります.元の構成は次のとおりです.
上記の構成を使用して、JPAが発行したログには、クエリーのたびに更新操作が行われることが表示されます.springに関する資料を調べたところ、transactionAttributesの様々な属性の意味がわかりました.
PROPAGATION_REQUIRD--現在のトランザクションをサポートし、現在トランザクションがない場合は新規トランザクションを作成します.これは最も一般的な選択です.
PROPAGATION_SUPPORTS--現在のトランザクションをサポートし、現在トランザクションがない場合は非トランザクションで実行します.
PROPAGATION_MANDATORY--現在のトランザクションをサポートし、現在トランザクションがない場合は例外を放出します.
PROPAGATION_REQUIRES_NEW--新しいトランザクションを作成します.現在トランザクションが存在する場合は、現在のトランザクションを保留します.
PROPAGATION_NOT_SUPPORTED-現在トランザクションが存在する場合は、非トランザクションでアクションを実行します.
PROPAGATION_NEVER---非トランザクションで実行され、現在トランザクションが存在する場合は例外が放出されます.
PROPAGATION_NESTED-現在トランザクションが存在する場合は、ネストされたトランザクション内で実行します.現在トランザクションがない場合は、
PROPAGATION_REQUIRD同様の操作.
現在、すべてのトランザクションで「PROPACATION_REQUIRD」属性値が使用されており、トランザクションの操作権限が読み取り専用であることを制御して、クエリ時にデータが更新されないようにしています.上記の定義に従って「PROPAGATION_REQUIRD」属性を定義すると、すべての操作に対してトランザクションが作成され、JPAのログでのクエリ時に更新操作が行われる現象が発生し、効率が低下します.すべてのクエリーの操作を「PROPACATION_NEVER」(トランザクションを使用しない)に変更すると、クエリーの効率はすぐに向上しますが、saveXXX()のメソッドで、メソッド内で更新、クエリー、再更新の操作プロセスを使用すると、クエリーを呼び出すときに上記の構成による放出異常が発生しないという問題が懸念されます.また、もし
次の構成があります.
-EXceptionはExceptionが放出された場合、トランザクションがロールバックされることを示します.-ロールバックを表す+コミットを表す
readonlyはread onlyであり、操作権限を読み取り専用に設定し、一般的にクエリーの方法、最適化作用に用いる.
まとめ
以上、Spring構成におけるtransactionAttributesの使い方についてご紹介したすべての内容をご紹介しましたので、お役に立てばと思います.興味のある方は、SpringbootのSpringのメリットについて簡単に説明することを参照してください. 、 Springトランザクション伝播のプロパティと独立性レベルの詳細 、 Spring Bootマイクロサービスプロジェクトの推奨配置方法などについて簡単に説明します.皆様のご支援に感謝いたします.
スプリングの関連構成を検索すると、「transactionAttributes」に問題があることがわかります.元の構成は次のとおりです.
PROPAGATION_REQUIRED
PROPAGATION_REQUIRED
PROPAGATION_REQUIRED
PROPAGATION_REQUIRED,readOnly
PROPAGATION_REQUIRED,readOnly
上記の構成を使用して、JPAが発行したログには、クエリーのたびに更新操作が行われることが表示されます.springに関する資料を調べたところ、transactionAttributesの様々な属性の意味がわかりました.
PROPAGATION_REQUIRD--現在のトランザクションをサポートし、現在トランザクションがない場合は新規トランザクションを作成します.これは最も一般的な選択です.
PROPAGATION_SUPPORTS--現在のトランザクションをサポートし、現在トランザクションがない場合は非トランザクションで実行します.
PROPAGATION_MANDATORY--現在のトランザクションをサポートし、現在トランザクションがない場合は例外を放出します.
PROPAGATION_REQUIRES_NEW--新しいトランザクションを作成します.現在トランザクションが存在する場合は、現在のトランザクションを保留します.
PROPAGATION_NOT_SUPPORTED-現在トランザクションが存在する場合は、非トランザクションでアクションを実行します.
PROPAGATION_NEVER---非トランザクションで実行され、現在トランザクションが存在する場合は例外が放出されます.
PROPAGATION_NESTED-現在トランザクションが存在する場合は、ネストされたトランザクション内で実行します.現在トランザクションがない場合は、
PROPAGATION_REQUIRD同様の操作.
現在、すべてのトランザクションで「PROPACATION_REQUIRD」属性値が使用されており、トランザクションの操作権限が読み取り専用であることを制御して、クエリ時にデータが更新されないようにしています.上記の定義に従って「PROPAGATION_REQUIRD」属性を定義すると、すべての操作に対してトランザクションが作成され、JPAのログでのクエリ時に更新操作が行われる現象が発生し、効率が低下します.すべてのクエリーの操作を「PROPACATION_NEVER」(トランザクションを使用しない)に変更すると、クエリーの効率はすぐに向上しますが、saveXXX()のメソッドで、メソッド内で更新、クエリー、再更新の操作プロセスを使用すると、クエリーを呼び出すときに上記の構成による放出異常が発生しないという問題が懸念されます.また、もし
〈prop key="myMethod"〉PROPAGATION_REQUIRED,readOnly,-Exception〈/prop〉
次の構成があります.
-EXceptionはExceptionが放出された場合、トランザクションがロールバックされることを示します.-ロールバックを表す+コミットを表す
readonlyはread onlyであり、操作権限を読み取り専用に設定し、一般的にクエリーの方法、最適化作用に用いる.
まとめ
以上、Spring構成におけるtransactionAttributesの使い方についてご紹介したすべての内容をご紹介しましたので、お役に立てばと思います.興味のある方は、SpringbootのSpringのメリットについて簡単に説明することを参照してください. 、 Springトランザクション伝播のプロパティと独立性レベルの詳細 、 Spring Bootマイクロサービスプロジェクトの推奨配置方法などについて簡単に説明します.皆様のご支援に感謝いたします.