0

Spring AOP ベースの宣言型トランザクション管理を使用してすべてのメソッドをトランザクションとして定義すると、パフォーマンスが低下しますか? 以下の構成を参照してください。その理由は、開発者が非トランザクション メソッドに付けるメソッド名がわからないからです。1 つのオプションは、ワイルド カード リストから始めて、メソッド名が定義されたリストに該当しない場合、開発者がリストを更新することです。

<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="*" />
    </tx:attributes>
</tx:advice>

<aop:config>
    <aop:pointcut id="dtxops" expression="bean(*Service)" />
    <aop:advisor advice-ref="txAdvice" pointcut-ref="dtxops" />
</aop:config>
4

2 に答える 2

1

使用している基になるトランザクション マネージャーによって異なります。デフォルトのスプリング「スレッドごとのトランザクション、XA トランザクションなし」には、おそらくペナルティはありません。XA トランザクション マネージャーで JBoss を使用している場合、トランザクション ログにデータが書き込まれます。

-- オリジナル -- それでも、パフォーマンスの低下はかなり小さいことがわかると思います。

-- 編集済み -- 私の経験では、JBoss トランザクション マネージャーを使用して読み取り専用に変換した場合、パフォーマンスが大幅に向上したことはありません。以下のコメントによると、少なくとも 1 人のユーザーのパフォーマンスが 30% 向上しました。これは重要です。

于 2011-10-10T15:28:15.103 に答える
1

理論的には、必要以上のメソッドに AOP (したがってイントロスペクション/リフレクション) オーバーヘッドを追加すると、パフォーマンスが低下します。また、必要以上のトランザクションを開いたり閉じたりするという追加のオーバーヘッドもあります。IMHO のトランザクションをいつ開始する必要があるかを知るのは、データ アクセス レイヤーをコーディングする開発者次第です。

于 2011-10-10T15:29:45.047 に答える