H5W3
当前位置:H5W3 > 其他技术问题 > 正文

超级简单的数据库连接池

连接池最基本的目的: 1、重用连接,节省连接资源; 2、免去建立连接操作,提高效率3. 限制最大连接并发数自己弄的一个连接池,绝对高效安全,支持多数据源连接池的两种实现方式:1. 修饰模式弄个ConnectionWrapper类出来 2. 动态代理这里采用的是第一种方式ConnectionAdapter  implements ConnetionConnectionWrapper extends ConnectionAdapter ConnectionWrapper 中封装了connection对象close方法重写为{ SimpleConnectionPool.putConnectionToPool(this); //把连接返回连接池}配置文件 app.propertiesConnectionAdapter 从DBCP拷贝过来,删了些垃圾东西支持多数据源DBUtil.getConn();//获取默认连接池DBUtil.getConn(pool_name);//获取指定名称的连接池各参数说明pool_name.dirverdriver=net.sourceforge.jtds.jdbc.Driverurl=jdbc:jtds:sqlserver://127.0.0.1:1433/datauser=sapwd=satype=sqlserver //数据库类型pool=1        //是否使用连接池 1 使用max_wait=3    //连接池已满时,最大等待时间 ,单位 s#timeout ,wait time when max active ,  unit smax_active=20  //最大活动连接数,用这个来控制最大并发数min_free=3     //连接池中最小空闲连接数max_free=20    //连接池中最大空闲连接数,默认=max_activecheck_sql=select getdate()  //验证连接是否有效,clear_time=2                //清理空闲连接#clear_time,remove the old connection,unit min还可以用动态代理的方式实现连接池2.动态代理实现class ConnectionWrapper implements InvocationHandler {private final static String CLOSE_METHOD_NAME = “close”;  public Connection connection = null;  private Connection m_originConnection = null; ConnectionWrapper(Connection con,String pool_name)throws Exception {    this.pool_name=pool_name;        this.check_sql = getCheckSqlByPoolName(pool_name);        last_use_time = System.currentTimeMillis();    create = StringUtil.getNowTime()+””;          Class[] interfaces = {java.sql.Connection.class};    this.connection = (Connection) Proxy.newProxyInstance(      con.getClass().getClassLoader(),      interfaces, this);    m_originConnection = con;  }    void close() {    //m_originConnection.close();      DBUtil.close(m_originConnection);  }  public Object invoke(Object proxy, Method m, Object[] args) throws Throwable {    Object obj = null;    if (CLOSE_METHOD_NAME.equals(m.getName())) {        //SimpleConnectionPool.pushConnectionBackToPool(this);        SimpleConnectionPool.putConnectionToPool(this);            }    else {              obj = m.invoke(m_originConnection, args);      //last_use_time = System.currentTimeMillis();    }          return obj;  }  }              代码不全,只提供连接池部分代码,学习交流用

本文地址:H5W3 » 超级简单的数据库连接池

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址