Spring配置におけるtractionAttributesの使い方を紹介します。


最近この問題に遭遇しました。springで提供されたJpaTemplateを使って検索すると、データ量が100を超えると、照会効率が著しく低下します。開始時にJPA内部の双方向関連を使用することにより、各エンティティ内部の関連が過剰になり、すべての操作に影響を与えるため、JPAの関連関係が疑われます。ただし、関連関係を解消した後の効果は顕著ではない。
springの関連している配置を探して、もとは“tractionAttributes”に関して問題があることを発見します。元の設定は以下の通りです。

<bean id="baseTransactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" 
lazy-init="true" abstract="true"> 
<property name="transactionManager"> 
<ref bean="transactionManager" /> 
</property> 
<property name="transactionAttributes"> 
<props> 
<prop key="sav*">PROPAGATION_REQUIRED</prop> 
<prop key="update*">PROPAGATION_REQUIRED</prop> 
<prop key="delete*">PROPAGATION_REQUIRED</prop> 
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop> 
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop> 
</props> 
</property> 
</bean> 
上記の構成を使用して、JPAが打ち出したログには毎回検索時に更新操作が行われることが表示されています。関連のspringの資料を調べて、transpationAttributesの各種属性の意味を発見しました。以下のように資料を共有します。
PROPAAGATION_REQUIRED--現在の事務をサポートしています。もし現在事務がないなら、新しい事務を作ります。これは一番よくある選択です。
PROPAAGATION_SUPPORTS--現在の事務をサポートしておりますが、現在は事務がない場合は非事務で行います。
PROPAAGATION_MANDATORY--現在の事務をサポートしています。
PROPAAGATION_REQUIRES_NEW-新規事務は、現在の事務があれば、現在の事務を保留します。
PROPAAGATION_NOT_SUPPORTED--非事務的に操作を行い、現在の事務があれば、現在の事務を保留します。
PROPAAGATION_NEVER--非事務的に行われていますが、現在事務がある場合は異常を投げます。
PROPAAGATION_NESTEP-現在のトランザクションが存在する場合は、ネストトランザクション内で実行します。現在、事務がない場合は、
PROPAAGATION_REQUIREDと同様の動作。
現在の事務はすべて「PROPAAGATION_」を使用しています。REQUIRED属性値は、クエリーにおいてデータが更新されないように、トランザクションの操作権限が読み取り専用です。上記の定義により「PROPAAGATION_REQUIRED属性は、すべての操作に対して事務を作成し、JPAのログで検索しても更新操作が行われるという現象が発生し、効率が低下します。すべてのクエリの操作をトランザクションタイプに変更します。NEVER」(事務を使わない)と、すぐにクエリの効率が向上しますが、この時点で一つの問題が心配されています。例えば、一つのsaveXXX()の方法で、方法の内部で更新、照会、再更新の操作プロセスを使用すれば、クエリを呼び出すことができますか?
また、出現したら

〈prop key="myMethod"〉PROPAGATION_REQUIRED,readOnly,-Exception〈/prop〉 
このような構成は、
-ExceptionはExceptionから投げ出された場合、事務がロールバックするという意味です。-代表ロール+は提出することになります。
read onlyはread onlyで、操作権限を設定するのは読み取り専用で、普通は検索の方法に用いて、役割を最適化します。
締め括りをつける
以上がSpring構成におけるtranspationAttributesの使い方について紹介した内容の全部です。興味のある友達はSprigbootのSpringのメリットについて簡単に話します。を参照してください。 、  Spring事務伝播属性と隔離レベルの詳細  、 Spring Boot微サービスプロジェクトのおすすめの展開方法を説明します。などです。みなさんの応援に感謝します。