我們在我們的項目中使用了Spring + JPA + Hibernate + MYSQL。使用EHCache,查詢緩存和c3p0。spring jpa事務查詢的次數
在代碼中的某一點,我們爲每個請求啓動一個新的事務。
就在離開創建事務的方法之前,我想獲取當前事務中碰到數據庫的 數量的查詢。
請指導我如何獲取此信息。
我們在我們的項目中使用了Spring + JPA + Hibernate + MYSQL。使用EHCache,查詢緩存和c3p0。spring jpa事務查詢的次數
在代碼中的某一點,我們爲每個請求啓動一個新的事務。
就在離開創建事務的方法之前,我想獲取當前事務中碰到數據庫的 數量的查詢。
請指導我如何獲取此信息。
您將需要包裝JDBC類(看看P6SPY)。你也可以通過編寫一個周邊的方面來實現類似的東西 - 你將需要使用aspectj,因爲spring aop將無法將方面應用到不是bean的類。
一旦您有能力爲每個數據庫調用添加額外的邏輯,您就可以創建一個實現,它使用線程本地來分別爲每個事務保存計數。
使用彈簧transaction syncronization支持在事務完成時重置/記錄統計信息。
休眠支持statistics和檢查this的使用。檢查org.hibernate.stat.QueryStatistics.getExecutionCount()
。但是這給出了在此之前執行的所有查詢的計數,因此您需要在方法執行之前和執行之後獲得計數之間的差異。此外,您還需要確保沒有其他事務(例如石英預定作業)正在對db執行操作以獲得準確的計數。
不能將其用作其多線程系統,並且我們有多個請求在大部分時間執行 –
您可以先閱讀關於攔截器和aop的內容 –