2014-03-28 42 views

回答

0

Hibernate的較新版本的這個數據庫連接屬性:

hibernate.connection.acquisition_mode 

可以設置爲立即,從而

「連接將盡快Hibernate的Session是收購 已打開,這也會繞過ConnectionReleaseMode,因爲連接 將被保留,直到會話關閉。「

1

Hibernate最好儘量使用數據庫連接。在打開會話時聲明數據庫連接與此相反(沒有可執行的查詢,這將在稍後進行)。一個副作用是池會很快耗盡。

c3p0使用checkoutTimeout來確定當池耗盡時等待連接變爲可用的時間。默認情況下,這個超時是0(即沒有超時),但是如果它被設置爲另一個值(例如50 000毫秒)並且達到超時,則拋出SQLException

您可以嘗試做出有根據的猜測,看看在開始交易之前是否會達到checkoutTimeout,但這總是一個猜測:它取決於其他交易完成的速度。
爲了做出猜測,您可以使用c3p0的JMX interface並獲取連接數(NumConnections),繁忙連接數(NumBusyConnections)和等待連接的線程數(NumThreadsAwaitingCheckout)的值。
如果有很多繁忙的連接並且有很多線程正在等待,那麼很有可能會到達checkoutTimeout,但您必須通過壓力測試確定確切的數字。

相關問題