刚买了深入浅出hibernate,打算研究一段时间.昨天看到第一章的Connection pool小节的时候,心理七上八下的.我原来所用的数据库连接都是公司自己写的一个Connection,以为不会有什么问题.印象中查看的日志都是,
新增xx连接
清除xx连接
以前调用连接的时候都是
if(conn != null)
try
{
}catch(Exception e){}{finally{db.closeDB();}在查看下closeDB()方法,竟然是{conn.close();connManager.freeConnection(conn);.
晕了,这样都Connection.conn.close();了,还用得着freeConnection,连接池就一点用处都没有了.
重新设置了maxconn=10后,修改freeConnection().
有两个问题请教下:
maxconn的设置有什么依据?
我设置了maxconn=10,那么数据库中始终打开着10个的数据库连接,那么要维持这10个连接需要一定的系统资源,系统是怎么维护这10个数据库连接的.
新增xx连接
清除xx连接
以前调用连接的时候都是
if(conn != null)
try
{
}catch(Exception e){}{finally{db.closeDB();}在查看下closeDB()方法,竟然是{conn.close();connManager.freeConnection(conn);.
晕了,这样都Connection.conn.close();了,还用得着freeConnection,连接池就一点用处都没有了.
重新设置了maxconn=10后,修改freeConnection().
有两个问题请教下:
maxconn的设置有什么依据?
我设置了maxconn=10,那么数据库中始终打开着10个的数据库连接,那么要维持这10个连接需要一定的系统资源,系统是怎么维护这10个数据库连接的.
维持10个连接只要有对这些连接的引用就可以了。
其实我们在操作的时候不能够关闭连接。
我们所作的conn.close();其实就是把连接重新还给连接池。第二个问题:我不知道连接还能被清楚。就算是能够清楚。也是具体连接池自动运行的。估计没有给客户提供接口。但是现在连接池种类这么多。所以我也不好说。
--------------这句话有点疑问:
由于getConnetction方法返回的是一个jdbc的connection,程序员由于编成习惯,可能会习惯性的调用其close方法关闭连接.如此一来,连接便无法得到重用,数据库连接池机制形同虚设.
这是深入浅出 hibernate中写的.不知道是否我理解错了.看下我的freeConnection()方法;
public synchronized void freeConnection(Connection con) {
if(freeConnections.size()>maxConn)
{
try
{
con.close();
freeConnections.removeElement(con);
log.write("清除" + name + "的连接");
}catch(SQLException e){
}finally{}
}
else
{
freeConnections.addElement(con);
}
}也就是说在连接数没有达到maxConn的时候,是不关闭连接的.第二个问题,我是想说,如果数据库中有连接是不活动的(不知道这样说是否正确,期待指教),那么过一段时间把该连接close掉.