Cannot get a connection, pool exhausted
问题说明:
工程运行的时候偶尔会抛出Cannot get a connection, pool exhausted这个异常
看这个提示信息比较明确了,无法获取数据库连接,连接池耗尽
问题分析:
首先看看tomcat的配置,是不是最大连接数过少:
<Resource name="DBSERVER_DS" type="javax.sql.DataSource" maxWait="5000" maxActive="100" maxIdle="40" username="123" password="123" url="jdbc:oracle:thin:@1.2.3.4:1521:123" driverClassName="oracle.jdbc.driver.OracleDriver" >
应该没问题,并发也不会超过100
数据库也可以手动连接上,也不是数据库最大连接限制的问题
上网查了下,发现查询连接未释放会出现这个问题,由于连接未释放,设置的最大并发数又比较小(100),很快连接就会被耗尽
public List<Object[]> getQueryList(String sql) throws DAOException{ Session session = this.getSession(); SQLQuery query = session.createSQLQuery(sql); List<Object[]> result = new ArrayList<Object[]>(); result = query.list(); return result; }
还真没释放。。。
解决方式:
try{ ... }catch(Exception e){ ... }finally{ if(null != session){ session.close(); } }