? ? 之前一直用的Mybatis在與Spring整合中尸闸,可以不用手動(dòng)關(guān)閉session。也沒(méi)有遇到數(shù)據(jù)庫(kù)連接池被占用的問(wèn)題孕锄。
? ? 現(xiàn)在用mybatis和公司自己封裝的JDBC框架進(jìn)行數(shù)據(jù)庫(kù)操作吮廉。在商城查詢點(diǎn)卡信息的時(shí)候,頁(yè)面刷新多次畸肆,即查詢了多次宦芦。然后數(shù)據(jù)加載就開始超時(shí)。然后跑單元測(cè)試轴脐,沒(méi)有問(wèn)題调卑。查看源碼,發(fā)現(xiàn)在底層把statement和resultSet在finallyl里殺掉了大咱。以為對(duì)該次查詢已經(jīng)做了處理恬涧。
? ? 檢查c3p0配置,發(fā)現(xiàn)查詢的次數(shù)正好等于最大鏈接的個(gè)數(shù)碴巾,再訪問(wèn)就超時(shí)溯捆。認(rèn)為就是連接池被占用的問(wèn)題,跑測(cè)試類不存在連接池的問(wèn)題厦瓢。
最后提揍,在service層在finally中session.close();問(wèn)題解決啤月。
公司的底層關(guān)閉的statement和resultSet并沒(méi)有關(guān)閉connection,這樣就需要手動(dòng)關(guān)閉session劳跃。