乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

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

       燮羽 2010-12-08
      概念:數(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)可以擁有的最大資源,也就是確定連接池的大?。≒oolSize)。 
      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)行獲?。?span id="mb17dyi" class=Apple-converted-space> 

      Context ctx = new InitalContext(); 
      DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/CompanyDB"); 
      Connection conn = ds.getConnection(); 


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

        本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多