Hibernate中session為釋放,導致tomcat死掉
阿新 • • 發佈:2018-12-18
應用程式採用struts2 + spring2 + hibernate3架構
連線池配置使用的是c3p0, 最大池大小為20, 很顯然是連線池耗盡導致的。 增加連線池大小隻是飲鴆止渴,總還有耗盡的時候,必須找到根本原因。
Dao類的分頁查詢方法如下:
java 程式碼
public List getTopics(int perPageStartNum, int perPageShowNum, long f_id) { Vector vector = new Vector(); Session session = getSession(); try { String sql = "select * from " + username + ".R_Dl where sbh=" + sbh + " and sjlx=" + type; Query query = session.createSQLQuery(sql); vector.add(query.list().size()); query.setFirstResult((pageNumber - 1) * pageSize); query.setMaxResults(pageSize); vector.add(query.list()); } catch (Exception e) { e.printStackTrace(); } finally { releaseSession(session); } return vector; }
我嘗試在獲得list之後,使用getSession().close()關閉,沒有效果。
geSession()是org.springframework.orm.hibernate3.support.HibernateDaoSupport 中的一個方法,
它可以從當前事務或者一個新的事務獲得一個hibernate session.
通常使用releaseSession(org.hibernate.Session)方法與getSession()配合。
如果沒有繫結執行緒,releaseSession關閉由這個DAO的SessionFactory建立的Hibernate Session。