chenjinlong

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

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

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

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

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

          Java開(kāi)源連接池:
          Jakarta DBCP 可直接在應(yīng)用程序中使用。(比較常用,集成在Tomcat和Struts中)
          C3P0是Hibernate的默認(rèn)數(shù)據(jù)庫(kù)連接池。(常用,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ù)庫(kù)連接池:

          我們使用Tomcat中l(wèi)ib文件夾下的tomcat-dbcp.jar。
          1. 修改server.xml文件在<Service>中寫(xiě)入以下代碼:
          <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ù)源的類(lèi)。
          factory:指定生成的DataReource的factory類(lèi)名;默認(rèn)DBCP工廠類(lèi)。
          driverClassName:數(shù)據(jù)庫(kù)驅(qū)動(dòng)名。
          url:數(shù)據(jù)庫(kù)連接的URL。
          username:數(shù)據(jù)庫(kù)用戶(hù)名。
          password:數(shù)據(jù)庫(kù)密碼。
          maxActive:最大連接數(shù)據(jù)庫(kù)數(shù),設(shè)為0表示沒(méi)有限制。
          maxIdle:最大等待數(shù)量,設(shè)為0表示沒(méi)有限制。
          maxWait:最大等待秒數(shù),單位為ms。
          removeAbandoned:是否自我中斷,默認(rèn)為false。
          removeAbandonedTimeOut:幾秒后會(huì)自我中斷,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:指定資源類(lèi)名。
          res-auth:指定資源的Manager。

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


          注意:java:comp/env/ 是java中JNDI固定寫(xiě)法。


          注意:如果該配置出現(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 閱讀(282) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


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

          My Links

          Blog Stats

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 福建省| 凤城市| 霞浦县| 凯里市| 阳山县| 伊金霍洛旗| 福泉市| 辽中县| 河间市| 鲜城| 县级市| 巴南区| 措勤县| 克什克腾旗| 澄迈县| 仁寿县| 清镇市| 革吉县| 得荣县| 喀喇| 瑞丽市| 扶绥县| 临沭县| 灌南县| 延边| 屏南县| 嘉义市| 吉首市| 婺源县| 习水县| 靖宇县| 化州市| 家居| 韶山市| 和林格尔县| 崇左市| 嘉黎县| 宣威市| 堆龙德庆县| 鄯善县| 九江县|