无论是怎样的应用系统,都无法脱离对资源的管理和使用。而对于持久层而言,资源的合理管理和调度则显得尤为重要。
资源管理机制的设计对于系统整体表现往往可以产生关键性影响。同时,除去性能之外,良好的资源管理机制还能为系统的伸缩性、可维护性带来相当的提升。
Connection Pool:数据库连接池技术带来的优势
1、资源重用
由于数据库连接得以重用,避免了频繁创建、释放连接引起的大量性能开销。在减少系统消耗的基础上,另一方面也增进了系统运行环境的平稳性。
2、更快的系统响应速度
数据库连接池在初始化过程中,往往已经创建了若干数据库连接池置于池中备用。此时连接的初始化工作均已完成。对于业务请求处理而言,直接利用现有可用连接,避免了数据库连接初始化和释放过程的时间开销,从而缩减了系统整体响应时间。
3、新的资源分配手段
对于多应用共享同一数据库的系统而言,可在应用层通过数据库连接池的配置,实现某一应用最大可用数据库连接数的限制,避免某一应用独占所有数据库资源
4、统一的连接管理,避免数据库连接泄露
在较为完备的数据库连接池实现中,可根据预先的连接占用超时设定,强制收回被占用连接。从而避免了常规数据库连接操作中可能出现的资源泄露。
public class DBConnectionPool implements ConnectionPool{
private statci Vector pool;
private final int POOL_MAX_SIZE = 20;
//获取数据库连接,如果当前池中有可用连接,则将池中最后一个返回,如果没有,则新建一个返回
public synchronized Connection getConnection()throws DBException{
if(pool==null){
pool = new Vector();
}
Connection conn;
if(pool.isEmpty()){
conn = createConnection();
}else{
int last_idx = pool.size()-1;
conn = (Connection)pool.get(last_idx);
pool.remove(pool.get(last_idx));
}
return conn;
}
//将使用完毕的数据库连接放回备用池中
public synchronized void releaseConnection(Connection conn){
if(pool.size()>POOL_MAX_SIZE){
try{
conn.close();
}catch(SQLException e){
e.printStackTrace();
}
}else{
pool.add(conn);
}
}
//读取数据库配置信息,从数据库连接池中获得数据库连接
private static Connection createConnection()throws DBException{
Connection conn;
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:oracle","personal","personal");
return conn;
}cacth(ClassNotFoundException e){
throw new DBException("ClassNotFoundException when loading JDBC Driver");
}
}
}
posted on 2009-10-07 15:26
王永庆 阅读(146)
评论(0) 编辑 收藏 所属分类:
HIBERNATE