關於spring事務管理不關閉connection問題!多謝。

qujingbo發表於2007-02-04
專案使用hibernate 2.0,spring 1.2.8,struts

問題在於連線很快就被佔滿,懷疑PSRING沒有管理連線,仔細檢視LOG發現,會有些warn提示unclosed session.在網上查了些資料,資料顯示若在DAO中使用getHibernateTemplate().*時,spring會自動管理session(包括connection),而強制使用getSession()時時spring是不管理session的。而專案中大量使用這種程式碼,如下:
Session session = this.getSession();
// 拼裝hql
String queryStr = "from DyDutyGroup dyDutyGroup where dyDutyGroup.isChange="
+ Constants.GROUP_IS_NOT_CHANGE
+ " AND PID IS NOT NULL and pid in "
+ "(select dyUser.dutyGroupId from DyUser dyUser where dyUser.userId = '"
+ userId + "'" + "and dyUser.isManager = 1" + ")";
Query query = session.createQuery(queryStr);
// 當前頁透過每頁數*當前頁數取得要取記錄的行數
query.setFirstResult(pageSize.intValue() * curPage.intValue());
// 取pageSize條
query.setMaxResults(pageSize.intValue());
java.util.List result = query.list();

其中這行Session session = this.getSession();正如資料顯示,spring是不進行session管理的。資料顯示需要手動關閉。

finally {
this.closeSessionIfNecessary(session);
}

這時,我做了試驗,在使用getSession()方法中新增closeSessionIfNecessary(session)關閉session方法。有此方法會關閉,而有些又是報錯,提示session is colsed。鬱悶至極。

相關文章