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();
         }
}

 

posted @ 2013-05-13 17:21  心意合一  阅读(667)  评论(0编辑  收藏  举报