2011-12-08 51 views
2

我們在我們的項目中使用了Spring + JPA + Hibernate + MYSQL。使用EHCache,查詢緩存和c3p0。spring jpa事務查詢的次數

在代碼中的某一點,我們爲每個請求啓動一個新的事務。

就在離開創建事務的方法之前,我想獲取當前事務中碰到數據庫的 數量的查詢。

請指導我如何獲取此信息。

+0

您可以先閱讀關於攔截器和aop的內容 –

回答

1

您將需要包裝JDBC類(看看P6SPY)。你也可以通過編寫一個周邊的方面來實現類似的東西 - 你將需要使用aspectj,因爲spring aop將無法將方面應用到不是bean的類。

一旦您有能力爲每個數據庫調用添加額外的邏輯,您就可以創建一個實現,它使用線程本地來分別爲每個事務保存計數。

使用彈簧transaction syncronization支持在事務完成時重置/記錄統計信息。

0

休眠支持statistics和檢查this的使用。檢查org.hibernate.stat.QueryStatistics.getExecutionCount()。但是這給出了在此之前執行的所有查詢的計數,因此您需要在方法執行之前和執行之後獲得計數之間的差異。此外,您還需要確保沒有其他事務(例如石英預定作業)正在對db執行操作以獲得準確的計數。

+0

不能將其用作其多線程系統,並且我們有多個請求在大部分時間執行 –