我正在創建Connection對象並在類(DbTest)的構造函數中創建jdbc連接。會話過期時關閉jdbc連接對象
在另一個Java類(RequestFilter.java)然後,我這個對象的初始化和存儲在HTTP會話這個實例對象,
DbTest dbtest = new DbTest();
session.setAttribute("dbtest", dbtest);
我的問題是,有沒有辦法關閉連接對象會話過期時創建了嗎?或者它會在到期時自動關閉?
我正在創建Connection對象並在類(DbTest)的構造函數中創建jdbc連接。會話過期時關閉jdbc連接對象
在另一個Java類(RequestFilter.java)然後,我這個對象的初始化和存儲在HTTP會話這個實例對象,
DbTest dbtest = new DbTest();
session.setAttribute("dbtest", dbtest);
我的問題是,有沒有辦法關閉連接對象會話過期時創建了嗎?或者它會在到期時自動關閉?
您可以實施HttpSessionListener
並在sessionDestroyed()
方法內進行清理。然而你的架構讓我感到擔憂。您不應該在HTTP會話中存儲原始JDBC連接!
你不能HTTP會話遷移到另一臺服務器
您可以輕鬆創建成千上萬打開的數據庫連接,HTTP會話是更輕便
的99.9%的時間你的數據庫連接空閒
你不大可能處理連接超時和其他故障
有每個用戶連接而不是連接池的原因嗎?
你可以實現HttpSessionBindingListener。
'HttpSessionBindingListener':*使對象在與會話綁定或解除綁定時得到通知*。 OP希望在會話到期時得到通知*。 'HttpSessionListener'是一個更好的選擇。 – 2012-03-15 13:42:07
使對象在與會話綁定或解除綁定時收到通知。該對象由HttpSessionBindingEvent對象通知。這可能是由於servlet程序員顯式地從會話中解除了某個屬性的結果,這是由於會話失效或由於會話超時而造成的。 – cjstehno 2012-03-15 16:58:08
您需要顯式關閉連接對象。您可以在finalize方法中關閉集合,但不建議這樣做,因爲可能不會調用finalize。更好的方法是編寫和調用將顯式關閉此連接的方法。也不建議在構造函數中創建JDBC連接。
管理連接池,也可能是一個問題。要從連接池獲得連接,您需要使用同步,這可以防止其他線程(客戶端)訪問連接池。
我明白了。 Plz在下面的鏈接中詳細說明了我的問題,因爲我無法在本文的評論部分添加足夠的內容,http://stackoverflow.com/questions/9723270/making-jdbc-connection-and-storing-in-session – 2012-03-15 15:51:39