connection如何釋放

2021-09-01 15:50:59 字數 1296 閱讀 4332

可以把session與connection的使用關係分為三種

session使用的連線是被提供的,常常sessionfactory.opensession(connection,interceptor?)

session使用的連線被借給客戶端,常常session.connection

session通過connectionprovider.getconnection得到的連線

乙個session中,connection釋放時機也分為細分三種,正如org.hibernate.connectionreleasemode定義的這樣

after_statement 每條sql執行完馬上釋放

after_transaction 事務結束之後釋放

on_close session關閉或失去連線之後釋放

以下的討論都與connection釋放有關

如果session使用的連線是被提供的,那麼當之後呼叫session.connection向session借取的連線就是之前被提供的連線,這型別的連線釋放模式必須是on_close,但即使這樣,連線也不能由session關閉之後而關閉,既然是被提供的,當然生命週期不必與session同步

如果session使用的連線是通過connectionprovider得到,並被提供給客戶端,那麼此時的客戶端得到的是乙個**連線(被**的物件正是connectionprovider獲取的),當呼叫**連線的close方法,並不能關閉被**的連線,只是標識快取中的borrowedconnection為空並設定**連線不可用,因為既然是借用session的,當然不能夠擅自了結連線。

如果session使用的連線是通過connectionprovider得到,那麼連線的釋放遵守connectionreleasemode定義,after_statement,after_transaction,on_close如果條件允許,即釋放掉連線。我們現在談談這些條件:

在每條語句執行之後

如果釋放模式為after_statement 當每條sql語句傳送是理應釋放連線,但下列條件之一不允許關閉

相關的statement和resultset還有沒關的

或者連線被借出去之後沒關的

或者呼叫flush方法還沒執行完

如果設定為自動提交並且事務尚未開始或已結束,則執行每條語句之後,也會釋放連線

在事務結束之後

如果釋放模式為after_transaction 當事務提交後一定釋放

釋放模式為after_statement並有statement尚未關閉時 強制關閉statement並釋放連線

在session關閉或disconnect丟掉連線時,釋放連線

connection 運算元簡介

1 connection region,connectedregions connection運算元一般就兩個引數,引數region表示需要計算的輸入影象區域,引數connectedregions表示輸出影象區域。2 connection函式簡介 如上圖所示 整個橢圓裡面的所有矩形,我們把所有這些矩...

如何釋放記憶體

現在手機的各種認證,對記憶體的要求越來越高,也越來越嚴格。很多情況下 因為記憶體的原因導致gts過不來。下面介紹下解決方法。1 其實手機軟體本身也會釋放記憶體,即gc。gc後很多無用的物件釋放後,應用的記憶體也會相應的降低。2 但是有些時候在測試cts的時候,獲取meminfo的時候,因為系統沒有觸...

Connection的頭字段

一 通用頭欄位 1.connection 這個欄位只在http1.1協議中存在。它決定了客戶端和伺服器進行了一次會話後,伺服器是否立即關閉網路連線。在客戶端最直接的表現是使用read方法 readline方法也是一樣 讀完客戶端請求的web資源後,是否立即返回 1 readline返回null co...