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 閱讀(387) 評論(0)  編輯  收藏 所屬分類: 數據庫

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

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 基隆市| 黎川县| 正蓝旗| 临清市| 日土县| 常宁市| 沅陵县| 虎林市| 澄城县| 荣成市| 保定市| 卢湾区| 华宁县| 临夏县| 四子王旗| 桃园县| 秦皇岛市| 盘锦市| 平乡县| 新绛县| 铜鼓县| 武定县| 出国| 尖扎县| 彰化县| 枝江市| 上犹县| 惠来县| 乐安县| 屏东市| 宁阳县| 九龙城区| 资阳市| 孟连| 英山县| 额敏县| 景泰县| 南岸区| 正蓝旗| 福州市| 黄平县|