<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    chenjinlong

    數(shù)據(jù)庫連接池DBCP

    概念:數(shù)據(jù)庫連接池負(fù)責(zé)分配、管理和釋放數(shù)據(jù)庫連接,它允許應(yīng)用程序重復(fù)使用一個(gè)現(xiàn)有的數(shù)據(jù)庫連接,而不再是重新建立一個(gè)連接;釋放空閑時(shí)間超過最大空閑時(shí)間的數(shù)據(jù)庫連接,以避免因?yàn)闆]有釋放數(shù)據(jù)庫連接而引起的數(shù)據(jù)庫連接遺漏。

    需要注意:
    1. 最小連接數(shù)是連接池一直保持的數(shù)據(jù)庫連接,所以如果應(yīng)用程序?qū)?shù)據(jù)庫連接的使用量不大,將會有大量數(shù)據(jù)庫連接資源被浪費(fèi)。
    2. 最大連接數(shù)是連接池能申請的最大連接數(shù),如果數(shù)據(jù)庫連接請求超過此數(shù),后面的數(shù)據(jù)庫連接請求將被加入到等待隊(duì)列中,這會影響之后的數(shù)據(jù)庫操作。

    數(shù)據(jù)庫連接池的兩個(gè)任務(wù):
    1. 限制每個(gè)應(yīng)用或系統(tǒng)可以擁有的最大資源,也就是確定連接池的大小(PoolSize)。
    2. 在連接池的大小(PoolSize)范圍內(nèi)、最大限度地使用資源,縮短數(shù)據(jù)庫訪問的使用周期。

    例如: 物理連接數(shù)200個(gè),每個(gè)連接提供250個(gè)Statemet,那么并發(fā)的Statement總數(shù)為200*250=50000個(gè)。

    Java開源連接池:
    Jakarta DBCP 可直接在應(yīng)用程序中使用。(比較常用,集成在Tomcat和Struts中)
    C3P0是Hibernate的默認(rèn)數(shù)據(jù)庫連接池。(常用,Hibernate)
    其他的還有Proxool、DDConnectionBroker、DBPool、XAPool、Primrose、SmartPool、MiniConnectionPoolManager。


    DBCP代碼實(shí)現(xiàn):
    //創(chuàng)建數(shù)據(jù)源
    public static DataSource setupDataSource(String connectURI) {
        BasicDataSource ds = new BasicDataSource();
        ds.setDriverClassName(org.gjt.mm.mysql.Driver);
        ds.setUsername("username");
        ds.setPassword("password");
        ds.setUrl(connectURI);
        return ds;   
    }

    //關(guān)閉數(shù)據(jù)源
    public static void shutdownDataSource(DataSource ds) throws SQLException {
        BasicDataSource bds = (BasicDataSource)ds;
        bds.close();
    }

    //數(shù)據(jù)源的使用

    DataSource dataSource = getDataSource();
      Connection conn = null;
      PreparedStatement pstmt = null;
      ResultSet rs = null;
      
      try {
       conn = dataSource.getConnection();
       pstmt = conn.prepareStatement("select * from users");
       rs = pstmt.executeQuery();
       while(rs.next()) {
        System.out.println(rs.getInt("id"));
       }
      } catch(Exception e) {
       e.printStackTrace();
      } finally {
       try {
        rs.close();
        pstmt.close();
        conn.close();
       } catch(Exception ex) {
        ex.printStackTrace();
       }
      } 




    在Tomcat中配置數(shù)據(jù)庫連接池:

    我們使用Tomcat中l(wèi)ib文件夾下的tomcat-dbcp.jar。
    1. 修改server.xml文件在<Service>中寫入以下代碼:
    <Context path="/WebProject" docBase="WebProject" reloadable="true" crossContext="true">
         
         <Resource auth="Container" name="jdbc/CompanyDB" type="javax.sql.DataSource"
          factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory" 
         driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"     
         url="jdbc:sqlserver://localhost:1433;DataBaseName=Company" 
         username="sa" 
          password="root" 
          maxActive="100" 
          maxIdle="30" 
          maxWait="10000"   
         removeAbandoned=“true”
          removeAbandonedTimeOut="10" 
          logAbandoned="true"/>
        </Context>


    path:工程路徑。
    docBase:工程名字。
    name:JNDI的名字。
    type:數(shù)據(jù)源的類。
    factory:指定生成的DataReource的factory類名;默認(rèn)DBCP工廠類。
    driverClassName:數(shù)據(jù)庫驅(qū)動名。
    url:數(shù)據(jù)庫連接的URL。
    username:數(shù)據(jù)庫用戶名。
    password:數(shù)據(jù)庫密碼。
    maxActive:最大連接數(shù)據(jù)庫數(shù),設(shè)為0表示沒有限制。
    maxIdle:最大等待數(shù)量,設(shè)為0表示沒有限制。
    maxWait:最大等待秒數(shù),單位為ms。
    removeAbandoned:是否自我中斷,默認(rèn)為false。
    removeAbandonedTimeOut:幾秒后會自我中斷,removeAbandoned必須為true。
    logAbandoned:是否記錄中斷事件,默認(rèn)為false。



    2. 修改web.xml文件,增加一個(gè)標(biāo)簽,輸入以下代碼:
    <resource-ref>
         <description>Company Connection</description>
         <res-ref-name>jdbc/CompanyDB</res-ref-name>
         <res-type>javax.sql.DataSource</res-type>
         <res-auth>Container</res-auth>
    </resource-ref>

    res-ref-name:指定JNDI的名字。
    res-type:指定資源類名。
    res-auth:指定資源的Manager。

    3. 代碼中使用JNDI代碼進(jìn)行獲取:
    Context ctx = new InitalContext();
    DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/CompanyDB");
    Connection conn = ds.getConnection();


    注意:java:comp/env/ 是java中JNDI固定寫法。


    注意:如果該配置出現(xiàn)錯(cuò)誤,采用另一種方式進(jìn)行配置

    在tomcat中的server.xml不進(jìn)行配置,而在context.xml中進(jìn)行設(shè)置
    代碼如下:
    <Resource name="jdbc/CompanyDB" type="javax.sql.DataSource" password="root"
    driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" maxIdle="2" maxWait="5000" username="sa" url="jdbc:sqlserver://localhost:1433;DataBaseName=Company" maxActive="100"/>


    web.xml的設(shè)置同上一個(gè)配置一樣。

    posted on 2010-08-23 20:01 chenjinlong 閱讀(279) 評論(0)  編輯  收藏


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


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

    My Links

    Blog Stats

    常用鏈接

    留言簿

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲日韩在线观看| 亚洲人成电影网站国产精品| 亚洲成AV人片在WWW色猫咪| 成在线人免费无码高潮喷水| 亚洲人成人网站在线观看| caoporn国产精品免费| 精品亚洲成α人无码成α在线观看| 黄页免费视频播放在线播放| 免费午夜爽爽爽WWW视频十八禁 | a级毛片免费在线观看| 亚洲色成人中文字幕网站| 免费无码又爽又刺激高潮软件| 亚洲国产一二三精品无码| 99热这里只有精品免费播放| 亚洲欧洲精品一区二区三区| 国产乱码免费卡1卡二卡3卡| 亚洲sm另类一区二区三区| 九月婷婷亚洲综合在线| 国色精品va在线观看免费视频| 亚洲激情在线视频| 男人的好看免费观看在线视频| 日韩国产欧美亚洲v片| 亚洲一区精品伊人久久伊人 | 曰批免费视频播放免费| 奇米影视亚洲春色| 精品一区二区三区免费毛片爱 | 亚洲午夜无码久久久久| 鲁大师在线影院免费观看| 国产午夜亚洲精品| 亚洲成a人在线看天堂无码| 日韩精品免费在线视频| 亚洲精品二三区伊人久久| 亚洲国产精品碰碰| 亚洲视频在线免费观看| 亚洲日本在线电影| 久久精品国产亚洲综合色| 成人黄动漫画免费网站视频| 久久精品免费大片国产大片| 亚洲va在线va天堂va手机| 亚洲国产成人久久综合区| 亚洲精品在线免费观看|