qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          java數據庫連接池 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;
          }
          }

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

            在使用Properties來創建BasicDataSource時,有很多參數可以設置,比較重要的還有:

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

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

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

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

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 宁乡县| 大厂| 庆城县| 新竹县| 仁怀市| 色达县| 集安市| 西华县| 伊宁市| 平泉县| 肇州县| 巨野县| 遂溪县| 清新县| 习水县| 贺州市| 临沧市| 岳池县| 商河县| 瑞安市| 吴江市| 漾濞| 大关县| 鄢陵县| 定陶县| 扎鲁特旗| 平湖市| 台东市| 合川市| 司法| 永兴县| 顺平县| 大邑县| 嘉义县| 新乡县| 临高县| 琼结县| 新乐市| 崇礼县| 翁牛特旗| 肇东市|