Java天空

           

          commons DBCP 配置參數(shù)簡(jiǎn)要說(shuō)明

            前段時(shí)間因?yàn)轫?xiàng)目原因,要在修改數(shù)據(jù)庫(kù)連接池到DBCP上,折騰了半天,有一點(diǎn)收獲,不敢藏私,特在這里與朋友們共享。
            在配置時(shí),主要難以理解的主要有:removeAbandoned 、logAbandoned、removeAbandonedTimeout、maxWait這四個(gè)參數(shù),設(shè)置了rmoveAbandoned=true那么在getNumActive()快要到getMaxActive()的時(shí)候,系統(tǒng)會(huì)進(jìn)行無(wú)效的Connection的回收,回收的Connection為removeAbandonedTimeout(默認(rèn)300秒)中設(shè)置的秒數(shù)后沒有使用的Connection,激活回收機(jī)制好像是getNumActive()=getMaxActive()-2。 :) 有點(diǎn)忘了。
            logAbandoned=true的話,將會(huì)在回收事件后,在log中打印出回收Connection的錯(cuò)誤信息,包括在哪個(gè)地方用了Connection卻忘記關(guān)閉了,在調(diào)試的時(shí)候很有用。
            在這里私人建議maxWait的時(shí)間不要設(shè)得太長(zhǎng),maxWait如果設(shè)置太長(zhǎng)那么客戶端會(huì)等待很久才激發(fā)回收事件。
            以下是我的配置的properties文件:
          #連接設(shè)置
          jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
          jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:DBSERVER
          jdbc.username=user
          jdbc.password=pass

          #<!-- 初始化連接 -->
          dataSource.initialSize=10

          #<!-- 最大空閑連接 -->
          dataSource.maxIdle=20

          #<!-- 最小空閑連接 -->
          dataSource.minIdle=5

          #最大連接數(shù)量
          dataSource.maxActive=50

          #是否在自動(dòng)回收超時(shí)連接的時(shí)候打印連接的超時(shí)錯(cuò)誤
          dataSource.logAbandoned=true

          #是否自動(dòng)回收超時(shí)連接
          dataSource.removeAbandoned=true

          #超時(shí)時(shí)間(以秒數(shù)為單位)
          dataSource.removeAbandonedTimeout=180

          #<!-- 超時(shí)等待時(shí)間以毫秒為單位 6000毫秒/1000等于60秒 -->
          dataSource.maxWait=1000

            以下是我在連接控制中調(diào)用的方法:

          ??????? Properties? dbProps=null;
            //下面的讀取配置文件可以根據(jù)實(shí)際的不同修改
          ??????? dbProps = ConfigProperties.getInstance().getProperties("jdbc.properties");
          ??????? try {
          ??????? ?String driveClassName = dbProps.getProperty("jdbc.driverClassName");
          ??????? ?String url = dbProps.getProperty("jdbc.url");
          ??????? ?String username = dbProps.getProperty("jdbc.username");
          ??????? ?String password = dbProps.getProperty("jdbc.password");
          ??????? ?
          ??????? ?String initialSize = dbProps.getProperty("dataSource.initialSize");
          ??????? ?String minIdle = dbProps.getProperty("dataSource.minIdle");
          ??????? ?String maxIdle = dbProps.getProperty("dataSource.maxIdle");
          ??????? ?String maxWait = dbProps.getProperty("dataSource.maxWait");
          ??????? ?String maxActive = dbProps.getProperty("dataSource.maxActive");
          ????????? ?//是否在自動(dòng)回收超時(shí)連接的時(shí)候打印連接的超時(shí)錯(cuò)誤
          ?????? ? ?boolean logAbandoned = (Boolean.valueOf(dbProps.getProperty("dataSource.logAbandoned","false"))).booleanValue();

          ?????? ? ?//是否自動(dòng)回收超時(shí)連接
          ?????? ? ?boolean removeAbandoned = (Boolean.valueOf(dbProps.getProperty("dataSource.removeAbandoned","false"))).booleanValue();

          ?????? ? ?//超時(shí)時(shí)間(以秒數(shù)為單位)
          ?????? ? ?int removeAbandonedTimeout = Integer.parseInt(dbProps.getProperty("dataSource.removeAbandonedTimeout","300"));
          ?????? ?
          ??????? ?dataSource = new BasicDataSource();
          ??????? ?dataSource.setDriverClassName(driveClassName);
          ??????? ?dataSource.setUrl(url);
          ??????? ?dataSource.setUsername(username);
          ??????? ?dataSource.setPassword(password);

          ??????? ?//初始化連接數(shù)
          ??????? ?if(initialSize!=null)
          ??????? ??dataSource.setInitialSize(Integer.parseInt(initialSize));
          ??????? ?
          ??????? ?//最小空閑連接
          ??????? ?if(minIdle!=null)
          ??????? ??dataSource.setMinIdle(Integer.parseInt(minIdle));

          ??????? ?//最大空閑連接
          ??????? ?if(maxIdle!=null)
          ??????? ??dataSource.setMaxIdle(Integer.parseInt(maxIdle));
          ??????? ?
          ??????? ?//超時(shí)回收時(shí)間(以毫秒為單位)
          ??????? ?if(maxWait!=null)
          ??????? ??dataSource.setMaxWait(Long.parseLong(maxWait));
          ??????? ?
          ??????? ?//最大連接數(shù)
          ??????? ?if(maxActive!=null){
          ??????? ??if(!maxActive.trim().equals("0"))
          ??????? ???dataSource.setMaxActive(Integer.parseInt(maxActive));
          ??????? ?}

          ??????? ?System.out.println("logAbandoned="+logAbandoned);
          ?????????? ?dataSource.setLogAbandoned(logAbandoned);
          ??????? ?dataSource.setRemoveAbandoned(removeAbandoned);
          ??????? ?dataSource.setRemoveAbandonedTimeout(removeAbandonedTimeout);
          ??????? ?
          ??????? ?Connection conn = dataSource.getConnection();
          ??????? ?if(conn==null){
          ??????? ??log("創(chuàng)建連接池時(shí),無(wú)法取得連接!檢查設(shè)置!!!");
          ??????? ?}else{
          ??????? ??conn.close();
          ??????? ?}
          ?????????System.out.println("連接池創(chuàng)建成功!!!");
          ??????? }
          ??????? catch (Exception e) {
          ??????? ?e.printStackTrace();
          ??????????? System.out.println("創(chuàng)建連接池失敗!請(qǐng)檢查設(shè)置!!!");
          ??????? }

            有使用問(wèn)題或建議可與我聯(lián)系:yy-man@163.com
          ??????
          ?????????2006-04-20?? By: 小土

          posted on 2006-04-20 11:49 YY 閱讀(3822) 評(píng)論(1)  編輯  收藏

          評(píng)論

          # re: commons DBCP 配置參數(shù)簡(jiǎn)要說(shuō)明 2008-05-29 14:31 ;l;

          ;l;oop
            回復(fù)  更多評(píng)論   


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          友情鏈接

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 连江县| 普兰店市| 江源县| 八宿县| 揭阳市| 青神县| 通道| 清新县| 鹤庆县| 沽源县| 文成县| 郁南县| 中江县| 正阳县| 亚东县| 革吉县| 陇川县| 吴旗县| 香河县| 荃湾区| 庆城县| 连州市| 开平市| 驻马店市| 彰武县| 嘉善县| 巴青县| 偃师市| 七台河市| 焉耆| 宁夏| 贵溪市| 巴楚县| 拜泉县| 海南省| 芒康县| 新巴尔虎左旗| 手机| 永新县| 晴隆县| 莱西市|