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

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

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

    隨筆-314  評(píng)論-209  文章-0  trackbacks-0
    目前市面上三個(gè)主流連接池從性能上排名如下:proxool>c3p0>dbcp,proxool還提供了可視化的連接池實(shí)時(shí)監(jiān)控工具,所以既穩(wěn)定又方便,配置也是非常容易的事情。下面我來講講我如何配置proxool連接池的。
          1、下載相關(guān)資源。

          從http://proxool.sourceforge.net/站點(diǎn)上下載我們需要的資源,proxool-0.9.1是最新版本,解壓后從lib下copy里面的2個(gè)JAR包 proxool-0.9.1.jar和 

    proxool-cglib.jar至項(xiàng)目中去。如果不加proxool-cglib.jar的話會(huì)報(bào) java.lang.ClassNotFoundException:org.logicalcobwebs.cglib.proxy.Callback異常。 

          2、首先在WEB-INF目錄下新建一個(gè)proxool.xml文件。

    Java代碼 復(fù)制代碼
    1. <?xml version="1.0" encoding="UTF-8"?>   
    2. <proxool-config>   
    3.     <proxool>   
    4.         <alias>datasource1</alias>   
    5.         <driver-url>jdbc:mysql://localhost:3306/datasource1</driver-url>   
    6.         <driver-class>com.mysql.jdbc.Driver</driver-class>   
    7.         <driver-properties>   
    8.             <property name="user" value="root" />   
    9.             <property name="password" value="root" />   
    10.         </driver-properties>   
    11.         <house-keeping-sleep-time>90000</house-keeping-sleep-time>   
    12.         <maximum-new-connections>20</maximum-new-connections>   
    13.         <prototype-count>5</prototype-count>   
    14.         <maximum-connection-count>1000</maximum-connection-count>   
    15.         <minimum-connection-count>10</minimum-connection-count>   
    16.     </proxool>   
    17.        
    18.     <proxool>   
    19.         <alias>datasource2</alias>   
    20.         <driver-url>jdbc:sybase:Tds:localhost:16428/datasource2</driver-url>   
    21.         <driver-class>com.sybase.jdbc3.jdbc.SybDriver</driver-class>   
    22.         <driver-properties>   
    23.             <property name="user" value="dba" />   
    24.             <property name="password" value="dba" />   
    25.         </driver-properties>   
    26.         <house-keeping-sleep-time>90000</house-keeping-sleep-time>   
    27.         <maximum-new-connections>20</maximum-new-connections>   
    28.         <prototype-count>5</prototype-count>   
    29.         <maximum-connection-count>1000</maximum-connection-count>   
    30.         <minimum-connection-count>10</minimum-connection-count>   
    31.     </proxool>   
    32. </proxool-config>  

               我在里面配置了2個(gè)不同數(shù)據(jù)庫(kù)的數(shù)據(jù)源,你可以根據(jù)需要配置多個(gè),其中具體的參數(shù)屬性我會(huì)在下面全部予以說明。
          3、配置web.xml文件。

    Java代碼 復(fù)制代碼
    1. <?xml version="1.0" encoding="UTF-8" ?>   
    2. <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"  
    3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    4.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">   
    5.     <servlet>   
    6.         <servlet-name>ServletConfigurator</servlet-name>   
    7.         <servlet-class>   
    8.             org.logicalcobwebs.proxool.configuration.ServletConfigurator   
    9.         </servlet-class>   
    10.         <init-param>   
    11.             <param-name>xmlFile</param-name>   
    12.             <param-value>WEB-INF/proxool.xml</param-value>   
    13.         </init-param>   
    14.         <load-on-startup>1</load-on-startup>   
    15.     </servlet>   
    16.     <servlet>   
    17.         <servlet-name>datasource_situation</servlet-name>   
    18.         <servlet-class>   
    19.             org.logicalcobwebs.proxool.admin.servlet.AdminServlet   
    20.         </servlet-class>   
    21.     </servlet>   
    22.     <servlet-mapping>   
    23.         <servlet-name>datasource_situation</servlet-name>   
    24.         <url-pattern>/datasource_situation</url-pattern>   
    25.     </servlet-mapping>   
    26.     <!-- 配置受保護(hù)域,只有Tomcat管理員才能察看連接池的信息 -->   
    27.     <security-constraint>   
    28.         <web-resource-collection>   
    29.             <web-resource-name>proxool</web-resource-name>   
    30.             <url-pattern>/datasource_situation</url-pattern>   
    31.         </web-resource-collection>   
    32.         <auth-constraint>   
    33.             <role-name>manager</role-name>   
    34.         </auth-constraint>   
    35.     </security-constraint>   
    36.     <login-config>   
    37.         <auth-method>BASIC</auth-method>   
    38.         <realm-name>proxool manager Application</realm-name>   
    39.     </login-config>   
    40.     <security-role>   
    41.         <description>   
    42.             The role that is required to log in to the Manager   
    43.             Application   
    44.         </description>   
    45.         <role-name>manager</role-name>   
    46.     </security-role>   
    47.     <error-page>   
    48.         <error-code>401</error-code>   
    49.         <location>/401.jsp</location>   
    50.     </error-page>   
    51. </web-app>  

               <load-on-startup>1</load-on-startup>用來設(shè)置加載屬性,一定要保證在其他配置項(xiàng)之前加載。

    Java代碼 復(fù)制代碼
    1. <servlet>   
    2.     <servlet-name>datasource_situation</servlet-name>   
    3.     <servlet-class>   
    4.         org.logicalcobwebs.proxool.admin.servlet.AdminServlet   
    5.     </servlet-class>   
    6. </servlet>   
    7. <servlet-mapping>   
    8.     <servlet-name>datasource_situation</servlet-name>   
    9.     <url-pattern>/datasource_situation</url-pattern>   
    10. </servlet-mapping>  

                這個(gè)屬性是用來提供察看連接池信息的工具,既在域名后跟上/datasource_situation就可以查看了,當(dāng)然名字可以自己定義。如果你想限制用戶和密碼來訪問就用

    Java代碼 復(fù)制代碼
    1. <security-constraint>   
    2.         <web-resource-collection>   
    3.             <web-resource-name>proxool</web-resource-name>   
    4.             <url-pattern>/datasource_situation</url-pattern>   
    5.         </web-resource-collection>   
    6.         <auth-constraint>   
    7.             <role-name>manager</role-name>   
    8.         </auth-constraint>   
    9.     </security-constraint>   
    10.     <login-config>   
    11.         <auth-method>BASIC</auth-method>   
    12.         <realm-name>proxool manager Application</realm-name>   
    13.     </login-config>   
    14.     <security-role>   
    15.         <description>   
    16.             The role that is required to log in to the Manager   
    17.             Application   
    18.         </description>   
    19.         <role-name>manager</role-name>   
    20.     </security-role>   
    21.     <error-page>   
    22.         <error-code>401</error-code>   
    23.         <location>/401.jsp</location>   
    24.     </error-page>  

               這段配置就限定了只有輸入了TOMCAT的管理員帳號(hào)密碼后就能登陸連接池查看工具了,如果連續(xù)三次登陸失敗,進(jìn)入401.jsp頁(yè)面。401.jsp要加入下段代碼

               response.setHeader("WWW-Authenticate", "Basic realm=\"Tomcat Manager Application\"");

          4、配置連接池連接類。

    Java代碼 復(fù)制代碼
    1. package selfservice;           
    2.           
    3. import java.sql.Connection;           
    4. import java.sql.DriverManager;           
    5. import java.sql.ResultSet;           
    6. import java.sql.SQLException;           
    7. import java.sql.Statement;           
    8.           
    9. import org.logicalcobwebs.proxool.ProxoolException;           
    10. import org.logicalcobwebs.proxool.ProxoolFacade;           
    11. import org.logicalcobwebs.proxool.admin.SnapshotIF;           
    12.           
    13.           
    14. public class PoolManager {           
    15.                
    16.     private static int activeCount = 0;           
    17.                
    18.                
    19.     public PoolManager(){           
    20.                    
    21.     }              
    22.     /**        
    23.      * 獲取連接        
    24.      * getConnection        
    25.      * @param name        
    26.      * @return        
    27.      */          
    28.     public Connection getConnection() {           
    29.         try{           
    30.             Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");//proxool驅(qū)動(dòng)類           
    31.             Connection conn = DriverManager.getConnection("proxool.datasource1");        
    32.            //此處的datasource1是在proxool.xml中配置的連接池別名,當(dāng)然根據(jù)需要可以用datasource2          
    33.             showSnapshotInfo();           
    34.                        
    35.             return conn;           
    36.         }catch(Exception ex){           
    37.             ex.printStackTrace();           
    38.         }           
    39.         return null;           
    40.     }           
    41.     /**        
    42.      * 此方法可以得到連接池的信息        
    43.      * showSnapshotInfo        
    44.      */          
    45.     private void showSnapshotInfo(){           
    46.         try{           
    47.             SnapshotIF snapshot = ProxoolFacade.getSnapshot("datasource1"true);           
    48.             int curActiveCount=snapshot.getActiveConnectionCount();//獲得活動(dòng)連接數(shù)           
    49.             int availableCount=snapshot.getAvailableConnectionCount();//獲得可得到的連接數(shù)           
    50.             int maxCount=snapshot.getMaximumConnectionCount() ;//獲得總連接數(shù)           
    51.             if(curActiveCount!=activeCount)//當(dāng)活動(dòng)連接數(shù)變化時(shí)輸出的信息           
    52.             {           
    53.              System.out.println("活動(dòng)連接數(shù):"+curActiveCount+"(active)  可得到的連接數(shù):"+availableCount+"(available)  總連接數(shù):"+maxCount+"(max)");                        
    54.              activeCount=curActiveCount;           
    55.             }           
    56.         }catch(ProxoolException e){           
    57.             e.printStackTrace();           
    58.         }           
    59.     }           
    60.     /**        
    61.      * 獲取連接        
    62.      * getConnection        
    63.      * @param name        
    64.      * @return        
    65.      */          
    66.     public Connection getConnection(String name){           
    67.         return getConnection();           
    68.     }           
    69.     /**        
    70.      * 釋放連接        
    71.      * freeConnection        
    72.      * @param conn        
    73.      */          
    74.     public void freeConnection(Connection conn){           
    75.         if(conn!=null){           
    76.             try {           
    77.                 conn.close();           
    78.             } catch (SQLException e) {                         
    79.                 e.printStackTrace();           
    80.             }           
    81.         }           
    82.     }           
    83.     /**        
    84.      * 釋放連接        
    85.      * freeConnection        
    86.      * @param name        
    87.      * @param con        
    88.      */          
    89.     public void freeConnection (String name,Connection con){           
    90.         freeConnection(con);           
    91.     }           
    92.                
    93.     public void getQuery() {                   
    94.         try {           
    95.             Connection conn = getConnection();           
    96.             if(conn != null){           
    97.                 Statement statement = conn.createStatement();           
    98.                 ResultSet rs = statement.executeQuery("select * from tblgxinterface");           
    99.                 int c = rs.getMetaData().getColumnCount();           
    100.                 while(rs.next()){                              
    101.                     System.out.println();           
    102.                     for(int i=1;i<=c;i++){           
    103.                         System.out.print(rs.getObject(i));           
    104.                     }           
    105.                 }           
    106.                 rs.close();           
    107.             }           
    108.             freeConnection(conn);           
    109.         } catch (SQLException e) {                     
    110.             e.printStackTrace();           
    111.         }           
    112.           
    113.     }           
    114.           
    115. }    

            測(cè)試成功!

            下面我來介紹一下proxool.xml文件中關(guān)于proxool各個(gè)屬性的詳細(xì)說明:

    fatal-sql-exception: 它是一個(gè)逗號(hào)分割的信息片段.當(dāng)一個(gè)SQL異常發(fā)生時(shí),他的異常信息將與這個(gè)信息片段進(jìn)行比較.如果在片段中存在,那么這個(gè)異常將被認(rèn)為是個(gè)致命錯(cuò)誤(Fatal SQL Exception ).這種情況下,數(shù)據(jù)庫(kù)連接將要被放棄.無論發(fā)生什么,這個(gè)異常將會(huì)被重?cái)S以提供給消費(fèi)者.用戶最好自己配置一個(gè)不同的異常來拋出.

     

    fatal-sql-exception-wrapper-class:正如上面所說,你最好配置一個(gè)不同的異常來重?cái)S.利用這個(gè)屬性,用戶可以包裝SQLException,使他變成另外一個(gè)異常.這個(gè)異常或者繼承SQLException或者繼承字RuntimeException.proxool自帶了2個(gè)實(shí)現(xiàn):'org.logicalcobwebs.proxool.FatalSQLException' 和'org.logicalcobwebs.proxool.FatalRuntimeException' .后者更合適.

     

    house-keeping-sleep-time: house keeper 保留線程處于睡眠狀態(tài)的最長(zhǎng)時(shí)間,house keeper 的職責(zé)就是檢查各個(gè)連接的狀態(tài),并判斷是否需要銷毀或者創(chuàng)建.

     

    house-keeping-test-sql:  如果發(fā)現(xiàn)了空閑的數(shù)據(jù)庫(kù)連接.house keeper 將會(huì)用這個(gè)語(yǔ)句來測(cè)試.這個(gè)語(yǔ)句最好非常快的被執(zhí)行.如果沒有定義,測(cè)試過程將會(huì)被忽略。

     

    injectable-connection-interface: 允許proxool實(shí)現(xiàn)被代理的connection對(duì)象的方法.

     

    injectable-statement-interface: 允許proxool實(shí)現(xiàn)被代理的Statement 對(duì)象方法.

     

    injectable-prepared-statement-interface: 允許proxool實(shí)現(xiàn)被代理的PreparedStatement 對(duì)象方法.

     

    injectable-callable-statement-interface: 允許proxool實(shí)現(xiàn)被代理的CallableStatement 對(duì)象方法.

     

    jmx:

     

    jmx-agent-id:

     

    jndi-name: 數(shù)據(jù)源的名稱

     

    maximum-active-time: 如果housekeeper 檢測(cè)到某個(gè)線程的活動(dòng)時(shí)間大于這個(gè)數(shù)值.它將會(huì)殺掉這個(gè)線程.所以確認(rèn)一下你的服務(wù)器的帶寬.然后定一個(gè)合適的值.默認(rèn)是5分鐘.

     

    maximum-connection-count: 最大的數(shù)據(jù)庫(kù)連接數(shù).

     

    maximum-connection-lifetime: 連接最大生命時(shí)間 默認(rèn)4小時(shí)

     

    minimum-connection-count: 最小的數(shù)據(jù)庫(kù)連接數(shù)

     

    overload-without-refusal-lifetime:

     

    prototype-count: 連接池中可用的連接數(shù)量.如果當(dāng)前的連接池中的連接少于這個(gè)數(shù)值.新的連接將被建立(假設(shè)沒有超過最大可用數(shù)).例如.我們有3個(gè)活動(dòng)連接2個(gè)可用連接,而我們的prototype-count是4,那么數(shù)據(jù)庫(kù)連接池將試圖建立另外2個(gè)連接.這和 minimum-connection-count不同. minimum-connection-count把活動(dòng)的連接也計(jì)算在內(nèi).prototype-count 是spare connections 的數(shù)量.

     

    recently-started-threshold:  略

     

    simultaneous-build-throttle:  同時(shí)最大連接數(shù)

     

    statistics:  連接池使用狀況統(tǒng)計(jì)。 參數(shù)“10s,1m,1d”

     

    statistics-log-level:  日志統(tǒng)計(jì)跟蹤類型。 參數(shù)“ERROR”或 “INFO”

     

    test-before-use:

     

    test-after-use:

     

    trace: 如果為true,那么每個(gè)被執(zhí)行的SQL語(yǔ)句將會(huì)在執(zhí)行期被log記錄(DEBUG LEVEL).你也可以注冊(cè)一個(gè)ConnectionListener (參看ProxoolFacade)得到這些信息.

     

    verbose: 詳細(xì)信息設(shè)置。 參數(shù) bool 值

     

    提供一個(gè)附件,里面是proxool-0.9.1.jar和proxool-cglib.jar,歡迎下載試用。

    posted on 2010-01-30 12:02 xzc 閱讀(1997) 評(píng)論(0)  編輯  收藏 所屬分類: SpringJava
    主站蜘蛛池模板: 一级中文字幕免费乱码专区| 国内精品久久久久影院亚洲| 久久青青草原亚洲av无码app| 少妇中文字幕乱码亚洲影视| 亚洲成a人片在线观看精品| 亚洲综合色区中文字幕| 真正全免费视频a毛片| 日韩av无码久久精品免费| 亚洲一卡一卡二新区无人区| 国产精品亚洲综合一区在线观看| eeuss草民免费| 亚洲综合免费视频| 国产网站免费观看| 99久久99这里只有免费的精品| 久操视频在线免费观看| 青苹果乐园免费高清在线| 亚洲精品国产高清不卡在线| 亚洲国产一区二区三区青草影视| 中文有码亚洲制服av片| 中文字幕在线观看免费| 国色精品卡一卡2卡3卡4卡免费| 国产公开免费人成视频| 亚洲毛片在线观看| 亚洲Av永久无码精品黑人| 免费人成毛片动漫在线播放| 成全视频免费高清| 亚洲AV午夜成人片| 日韩国产精品亚洲а∨天堂免| 免费高清国产视频| 国产在线a不卡免费视频| 亚洲综合一区二区国产精品| 老牛精品亚洲成av人片| 24小时日本电影免费看| 亚洲国产小视频精品久久久三级 | 3344免费播放观看视频| 免费人成视网站在线观看不卡| 亚洲无线电影官网| 全部在线播放免费毛片| 中文字幕无码视频手机免费看| 亚洲免费观看视频| 国产精品国产亚洲区艳妇糸列短篇|