qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請訪問 http://qaseven.github.io/

          java數(shù)據(jù)庫連接池 dbcp 的用法

            需要下commons-dbcp  commons-pool 這兩個jar包

          import org.apache.commons.dbcp.BasicDataSource;
          import org.apache.commons.dbcp.BasicDataSourceFactory;
          import java.sql.SQLException;
          import java.sql.Connection;
          import java.util.Properties;
          public class ConnectionSource {
          private static BasicDataSource dataSource = null;
          public ConnectionSource() {
          }
          public static void init() {
          if (dataSource != null) {
          try {
          dataSource.close();
          } catch (Exception e) {
          //
          }
          dataSource = null;
          }
          try {
          Properties p = new Properties();
          p.setProperty("driverClassName", "oracle.jdbc.driver.OracleDriver");
          p.setProperty("url", "jdbc:oracle:thin:@192.168.0.1:1521:testDB");
          p.setProperty("password", "scott");
          p.setProperty("username", "tiger");
          p.setProperty("maxActive", "30");
          p.setProperty("maxIdle", "10");
          p.setProperty("maxWait", "1000");
          p.setProperty("removeAbandoned", "false");
          p.setProperty("removeAbandonedTimeout", "120");
          p.setProperty("testOnBorrow", "true");
          p.setProperty("logAbandoned", "true");
          dataSource = (BasicDataSource) BasicDataSourceFactory.createDataSource(p);
          } catch (Exception e) {
          //
          }
          }
          public static synchronized Connection getConnection() throws  SQLException {
          if (dataSource == null) {
          init();
          }
          Connection conn = null;
          if (dataSource != null) {
          conn = dataSource.getConnection();
          }
          return conn;
          }
          }

            接下來,在我們的應(yīng)用中,只要簡單地使用ConnectionSource.getConnection()就可以取得連接池中的數(shù)據(jù)庫連接,享受數(shù)據(jù)庫連接帶給我們的好處了。當(dāng)我們使用完取得的數(shù)據(jù)庫連接后,只要簡單地使用connection.close()就可把此連接返回到連接池中,至于為什么不是直接關(guān)閉此連接,而是返回給連接池,這是因為dbcp使用委派模型來實現(xiàn)Connection接口了。

            在使用Properties來創(chuàng)建BasicDataSource時,有很多參數(shù)可以設(shè)置,比較重要的還有:

            testOnBorrow、testOnReturn、testWhileIdle,他們的意思是當(dāng)是取得連接、返回連接或連接空閑時是否進(jìn)行有效性驗證(即是否還和數(shù)據(jù)庫連通的),默認(rèn)都為false。所以當(dāng)數(shù)據(jù)庫連接因為某種原因斷掉后,再從連接池中取得的連接,實際上可能是無效的連接了,所以,為了確保取得的連接是有效的, 可以把把這些屬性設(shè)為true。當(dāng)進(jìn)行校驗時,需要另一個參數(shù):validationQuery,對oracle來說,可以是:SELECT COUNT(*) FROM DUAL,實際上就是個簡單的SQL語句,驗證時,就是把這個SQL語句在數(shù)據(jù)庫上跑一下而已,如果連接正常的,當(dāng)然就有結(jié)果返回了。

            還有2個參數(shù):timeBetweenEvictionRunsMillis 和 minEvictableIdleTimeMillis, 他們兩個配合,可以持續(xù)更新連接池中的連接對象,當(dāng)timeBetweenEvictionRunsMillis 大于0時,每過timeBetweenEvictionRunsMillis 時間,就會啟動一個線程,校驗連接池中閑置時間超過minEvictableIdleTimeMillis的連接對象。

          posted on 2013-09-24 10:18 順其自然EVO 閱讀(387) 評論(0)  編輯  收藏 所屬分類: 數(shù)據(jù)庫

          <2013年9月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 阳朔县| 兴国县| 东城区| 合江县| 黄龙县| 桂平市| 福建省| 公安县| 开远市| 大同县| 陈巴尔虎旗| 墨脱县| 博湖县| 昭平县| 贡觉县| 泸定县| 徐闻县| 临夏市| 汉阴县| 昭觉县| 漯河市| 石首市| 辽阳市| 林周县| 乐业县| 鞍山市| 福贡县| 文成县| 永胜县| 舟山市| 荣昌县| 农安县| 宜章县| 青海省| 达拉特旗| 广昌县| 湘乡市| 新化县| 新田县| 南华县| 三台县|