內(nèi)蒙古java團(tuán)隊(duì)

          j2se,j2ee開發(fā)組
          posts - 139, comments - 212, trackbacks - 0, articles - 65
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
          連接池最基本的目的:?
          1、重用連接,節(jié)省連接資源;?
          2、免去建立連接操作,提高效率
          3.?限制最大連接并發(fā)數(shù)


          自己弄的一個(gè)連接池,絕對(duì)高效安全,支持多數(shù)據(jù)源


          連接池的兩種實(shí)現(xiàn)方式:

          1.?修飾模式弄個(gè)ConnectionWrapper類出來?
          2.?動(dòng)態(tài)代理


          這里采用的是第一種方式



          ConnectionAdapter??implements?Connetion
          ConnectionWrapper?extends?ConnectionAdapter?

          ConnectionWrapper?中封裝了connection對(duì)象
          close方法重寫為
          {
          ?SimpleConnectionPool.putConnectionToPool(this);
          ?//把連接返回連接池
          }


          配置文件?app.properties


          ConnectionAdapter?從DBCP拷貝過來,刪了些垃圾東西

          支持多數(shù)據(jù)源

          DBUtil.getConn();//獲取默認(rèn)連接池
          DBUtil.getConn(pool_name);//獲取指定名稱的連接池



          各參數(shù)說明

          pool_name.dirver

          driver=net.sourceforge.jtds.jdbc.Driver
          url=jdbc:jtds:sqlserver://127.0.0.1:1433/data
          user=sa
          pwd=sa
          type=sqlserver?//數(shù)據(jù)庫類型
          pool=1????????//是否使用連接池?1?使用
          max_wait=3????//連接池已滿時(shí),最大等待時(shí)間?,單位?s
          #timeout?,wait?time?when?max?active?,??unit?s
          max_active=20??//最大活動(dòng)連接數(shù),用這個(gè)來控制最大并發(fā)數(shù)
          min_free=3?????//連接池中最小空閑連接數(shù)
          max_free=20????//連接池中最大空閑連接數(shù),默認(rèn)=max_active
          check_sql=select?getdate()??//驗(yàn)證連接是否有效,
          clear_time=2????????????????//清理空閑連接
          #clear_time,remove?the?old?connection,unit?min




          還可以用動(dòng)態(tài)代理的方式實(shí)現(xiàn)連接池


          2.

          動(dòng)態(tài)代理實(shí)現(xiàn)



          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;
          ??}
          ??

          }


          ??????????????代碼不全,只提供連接池部分代碼,學(xué)習(xí)交流用
          主站蜘蛛池模板: 彩票| 二连浩特市| 柳州市| 涞源县| 南投县| 哈密市| 龙州县| 方正县| 信阳市| 革吉县| 永年县| 洪湖市| 西青区| 渑池县| 蕉岭县| 咸阳市| 个旧市| 琼结县| 从江县| 巫山县| 西林县| 乐安县| 建湖县| 玉门市| 定安县| 富阳市| 彩票| 南川市| 集贤县| 淳化县| 辉南县| 涿鹿县| 清新县| 铁岭市| 东城区| 吉水县| 琼结县| 盱眙县| 洪泽县| 蕉岭县| 巴中市|