java攻城獅之路--複習JDBC(資料庫連接池 : C3P0、DBCP)

來源:互聯網
上載者:User

標籤:style   blog   http   color   os   java   使用   io   strong   

複習資料庫連接池 : C3P0、DBCP

1、資料庫連接池技術的優點:

•資源重用:     由於資料庫連接得以重用,避免了頻繁建立,釋放串連引起的大量效能開銷。在減少系統消耗的基礎上,另一方面也增加了系統運行環境的平穩性。•更快的系統反應速度:     資料庫連接池在初始化過程中,往往已經建立了若干資料庫連接置於串連池中備用。此時串連的初始化工作均已完成。對於業務請求處理而言,直接利用現有可用串連,避免了資料庫連接初始化和釋放過程的時間開銷,從而減少了系統的回應時間。•新的資源分派手段:     對於多應用共用同一資料庫的系統而言,可在應用程式層通過資料庫連接池的配置,實現某一應用最大可用資料庫連接數的限制,避免某一應用獨佔所有的資料庫資源。•統一的串連管理,避免資料庫連接泄露:     在較為完善的資料庫連接池實現中,可根據預先的佔用逾時設定,強制回收被佔用串連,從而避免了常規資料庫連接操作中可能出現的資源流失。  1)兩種開源的資料庫連接池:•  JDBC 的資料庫連接池使用 javax.sql.DataSource 來表示,DataSource 只是一個介面,    該介面通常由伺服器(Weblogic, WebSphere, Tomcat)提供實現,也有一些開源組織提供實現:    –DBCP 資料庫連接池    –C3P0 資料庫連接池•  DataSource 通常被稱為資料來源,它包含串連池和串連池管理兩個部分,習慣上也經常把 DataSource 稱為串連池 A:DBCP 資料來源 :•  DBCP 是 Apache 軟體基金組織下的開源串連池實現,該串連池依賴該組織下的另一個開源系統:Common-pool. 如需使用該串連池實現,應在系統中增加如下兩個 jar 檔案:– Commons-dbcp.jar:串連池的實現。– Commons-pool.jar:串連池實現的依賴庫。•   Tomcat 的串連池正是採用該串連池來實現的。該資料庫連接池既可以與應用伺服器整合使用,也可由應用程式獨立使用。DBCP 資料來源使用範例:•  資料來源和資料庫連接不同,資料來源無需建立多個,它是產生資料庫連接的工廠,因此整個應用只需要一個資料來源即可。•  當資料庫訪問結束後,程式還是像以前一樣關閉資料庫連接:conn.close(); 但上面的代碼並沒有關閉資料庫的物理串連,它僅僅把資料庫連接釋放,歸還給了資料庫連接池。
    /**     * 1. 載入 dbcp 的 properties 設定檔: 設定檔中的鍵需要來自 BasicDataSource     * 的屬性.     * 2. 調用 BasicDataSourceFactory 的 createDataSource 方法建立 DataSource     * 執行個體     * 3. 從 DataSource 執行個體中擷取資料庫連接.      */    @Test    public void testDBCPWithDataSourceFactory() throws Exception{                Properties properties = new Properties();        InputStream inStream = JDBCTest.class.getClassLoader()                .getResourceAsStream("dbcp.properties");        properties.load(inStream);                DataSource dataSource =                 BasicDataSourceFactory.createDataSource(properties);                System.out.println(dataSource.getConnection());         //        BasicDataSource basicDataSource = //                (BasicDataSource) dataSource;//        //        System.out.println(basicDataSource.getMaxWait());     }        /**     * 使用 DBCP 資料庫連接池     * 1. 加入 jar 包(2 個jar 包). 依賴於 Commons Pool     * 2. 建立資料庫連接池     * 3. 為資料來源執行個體指定必須的屬性     * 4. 從資料來源中擷取資料庫連接     * @throws SQLException      */    @Test    public void testDBCP() throws SQLException{        final BasicDataSource dataSource = new BasicDataSource();                //2. 為資料來源執行個體指定必須的屬性        dataSource.setUsername("root");        dataSource.setPassword("1230");        dataSource.setUrl("jdbc:mysql:///atguigu");        dataSource.setDriverClassName("com.mysql.jdbc.Driver");                //3. 指定資料來源的一些可選的屬性.        //1). 指定資料庫連接池中初始化串連數的個數        dataSource.setInitialSize(5);                //2). 指定最大的串連數: 同一時刻可以同時向資料庫申請的串連數        dataSource.setMaxActive(5);                //3). 指定小串連數: 在資料庫連接池中儲存的最少的空閑串連的數量         dataSource.setMinIdle(2);                //4).等待資料庫連接池分配串連的最長時間. 單位為毫秒. 超出該時間將拋出異常.         dataSource.setMaxWait(1000 * 5);                //4. 從資料來源中擷取資料庫連接        Connection connection = dataSource.getConnection();        System.out.println(connection.getClass());                 connection = dataSource.getConnection();        System.out.println(connection.getClass());                 connection = dataSource.getConnection();        System.out.println(connection.getClass());                 connection = dataSource.getConnection();        System.out.println(connection.getClass());                 Connection connection2 = dataSource.getConnection();        System.out.println(">" + connection2.getClass());                 new Thread(){            public void run() {                Connection conn;                try {                    conn = dataSource.getConnection();                    System.out.println(conn.getClass());                 } catch (SQLException e) {                    e.printStackTrace();                }            };        }.start();                try {            Thread.sleep(5500);        } catch (InterruptedException e) {            e.printStackTrace();        }                connection2.close();    }
DBCP資料來源例子
username=rootpassword=1230driverClassName=com.mysql.jdbc.Driverurl=jdbc:mysql:///atguiguinitialSize=10maxActive=50minIdle=5maxWait=5000
dbcp.properties

B:C3P0 資料來源

    /**     * 1. 建立 c3p0-config.xml 檔案,      * 參考說明文檔中 Appendix B: Configuation Files 的內容     * 2. 建立 ComboPooledDataSource 執行個體;     * DataSource dataSource =      *            new ComboPooledDataSource("helloc3p0");       * 3. 從 DataSource 執行個體中擷取資料庫連接.      */    @Test    public void testC3poWithConfigFile() throws Exception{        DataSource dataSource =                 new ComboPooledDataSource("helloc3p0");                  System.out.println(dataSource.getConnection());                 ComboPooledDataSource comboPooledDataSource =                 (ComboPooledDataSource) dataSource;        System.out.println(comboPooledDataSource.getMaxStatements());     }        @Test    public void testC3P0() throws Exception{        ComboPooledDataSource cpds = new ComboPooledDataSource();        cpds.setDriverClass( "com.mysql.jdbc.Driver" ); //loads the jdbc driver                    cpds.setJdbcUrl( "jdbc:mysql:///atguigu" );        cpds.setUser("root");                                          cpds.setPassword("1230");                   System.out.println(cpds.getConnection());     }
c3p0資料來源例子
<?xml version="1.0" encoding="UTF-8"?><c3p0-config>    <named-config name="helloc3p0">                <!-- 指定串連資料來源的基本屬性 -->        <property name="user">root</property>        <property name="password">1230</property>        <property name="driverClass">com.mysql.jdbc.Driver</property>        <property name="jdbcUrl">jdbc:mysql:///atguigu</property>                <!-- 若資料庫中串連數不足時, 一次向資料庫伺服器申請多少個串連 -->        <property name="acquireIncrement">5</property>        <!-- 初始化資料庫連接池時串連的數量 -->        <property name="initialPoolSize">5</property>        <!-- 資料庫連接池中的最小的資料庫連接數 -->        <property name="minPoolSize">5</property>        <!-- 資料庫連接池中的最大的資料庫連接數 -->        <property name="maxPoolSize">10</property>        <!-- C3P0 資料庫連接池可以維護的 Statement 的個數 -->        <property name="maxStatements">20</property>        <!-- 每個串連同時可以使用的 Statement 對象的個數 -->        <property name="maxStatementsPerConnection">5</property>        </named-config>        </c3p0-config>
c3p0-config.xml

 

 

(待續。。。)

 

 

 

 

 

 

java攻城獅之路--複習JDBC(資料庫連接池 : C3P0、DBCP)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.