2011-10-10 22 views
0

使用基於Spring AOP的聲明式事務管理將所有方法定義爲事務處理是否存在性能損失?請參閱下面的配置。原因是我不知道開發人員會爲非事務性方法提供什麼方法​​名稱。一種選擇是我從一個通配符列表開始,如果方法名不在定義列表下,開發人員會更新列表。在執行事務下的只讀查詢時是否存在性能損失?

<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> 
+0

http://stackoverflow.com/questions/818074/transactions-for-read-only-db-access – hvgotcodes

回答

1

這取決於您使用的底層事務管理器。默認彈簧「每個線程的交易,沒有XA交易」可能沒有任何處罰。如果您將JBoss與XA事務管理器一起使用,那麼它會將一些數據寫入事務日誌。

- original - 即使如此,我認爲你會發現性能損失相當小。

- 編輯 - 根據我的經驗,當使用JBoss事務管理器轉換爲Readonly時,我沒有看到性能的巨大增長。根據以下評論,至少有一位用戶看到了30%的性能提升,這是顯着的。

+0

我不同意,首先,增加額外的反射方法調用和交易開口無緣無故是資源(並因此性能)浪費。此外,即使所有這些都會添加日誌條目(它的功能遠遠超出了這一點,但我們假設),但這些仍然會導致應用程序崩潰。當過多的日誌被刪除時,我看到性能提高了30%。所以我並不認爲在這種情況下「性能損失相當小」 –

+0

我的經驗是,在JBoss中更改爲Readonly在Profiler中非常明顯,但與數據庫IO和CPU密集型邏輯相比,它仍然小。所以在我的情況下,我沒有看到性能提高30%。 – Dave

1

從理論上講,將AOP(從而自省/反射)開銷添加到更多的方法是不必要的。此外,打開和關閉更多事務所需的額外開銷。應該由編碼數據訪問層的開發人員知道何時以及是否應該啓動一個事務。

相關問題