问题说明:
工程运行的时候偶尔会抛出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();
}
}