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

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

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

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

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

    proxool-cglib.jar至項目中去。如果不加proxool-cglib.jar的話會報 java.lang.ClassNotFoundException:org.logicalcobwebs.cglib.proxy.Callback異常。 

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

    Java代碼 復制代碼
    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個不同數據庫的數據源,你可以根據需要配置多個,其中具體的參數屬性我會在下面全部予以說明。
          3、配置web.xml文件。

    Java代碼 復制代碼
    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.     <!-- 配置受保護域,只有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>用來設置加載屬性,一定要保證在其他配置項之前加載。

    Java代碼 復制代碼
    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>  

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

    Java代碼 復制代碼
    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的管理員帳號密碼后就能登陸連接池查看工具了,如果連續三次登陸失敗,進入401.jsp頁面。401.jsp要加入下段代碼

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

          4、配置連接池連接類。

    Java代碼 復制代碼
    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驅動類           
    31.             Connection conn = DriverManager.getConnection("proxool.datasource1");        
    32.            //此處的datasource1是在proxool.xml中配置的連接池別名,當然根據需要可以用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();//獲得活動連接數           
    49.             int availableCount=snapshot.getAvailableConnectionCount();//獲得可得到的連接數           
    50.             int maxCount=snapshot.getMaximumConnectionCount() ;//獲得總連接數           
    51.             if(curActiveCount!=activeCount)//當活動連接數變化時輸出的信息           
    52.             {           
    53.              System.out.println("活動連接數:"+curActiveCount+"(active)  可得到的連接數:"+availableCount+"(available)  總連接數:"+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. }    

            測試成功!

            下面我來介紹一下proxool.xml文件中關于proxool各個屬性的詳細說明:

    fatal-sql-exception: 它是一個逗號分割的信息片段.當一個SQL異常發生時,他的異常信息將與這個信息片段進行比較.如果在片段中存在,那么這個異常將被認為是個致命錯誤(Fatal SQL Exception ).這種情況下,數據庫連接將要被放棄.無論發生什么,這個異常將會被重擲以提供給消費者.用戶最好自己配置一個不同的異常來拋出.

     

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

     

    house-keeping-sleep-time: house keeper 保留線程處于睡眠狀態的最長時間,house keeper 的職責就是檢查各個連接的狀態,并判斷是否需要銷毀或者創建.

     

    house-keeping-test-sql:  如果發現了空閑的數據庫連接.house keeper 將會用這個語句來測試.這個語句最好非常快的被執行.如果沒有定義,測試過程將會被忽略。

     

    injectable-connection-interface: 允許proxool實現被代理的connection對象的方法.

     

    injectable-statement-interface: 允許proxool實現被代理的Statement 對象方法.

     

    injectable-prepared-statement-interface: 允許proxool實現被代理的PreparedStatement 對象方法.

     

    injectable-callable-statement-interface: 允許proxool實現被代理的CallableStatement 對象方法.

     

    jmx:

     

    jmx-agent-id:

     

    jndi-name: 數據源的名稱

     

    maximum-active-time: 如果housekeeper 檢測到某個線程的活動時間大于這個數值.它將會殺掉這個線程.所以確認一下你的服務器的帶寬.然后定一個合適的值.默認是5分鐘.

     

    maximum-connection-count: 最大的數據庫連接數.

     

    maximum-connection-lifetime: 連接最大生命時間 默認4小時

     

    minimum-connection-count: 最小的數據庫連接數

     

    overload-without-refusal-lifetime:

     

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

     

    recently-started-threshold:  略

     

    simultaneous-build-throttle:  同時最大連接數

     

    statistics:  連接池使用狀況統計。 參數“10s,1m,1d”

     

    statistics-log-level:  日志統計跟蹤類型。 參數“ERROR”或 “INFO”

     

    test-before-use:

     

    test-after-use:

     

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

     

    verbose: 詳細信息設置。 參數 bool 值

     

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

    posted on 2010-01-30 12:02 xzc 閱讀(1997) 評論(0)  編輯  收藏 所屬分類: SpringJava
    主站蜘蛛池模板: fc2免费人成在线视频| 精品久久久久成人码免费动漫| 亚洲线精品一区二区三区影音先锋| 亚欧免费无码aⅴ在线观看| 国产成人亚洲合集青青草原精品| 免费人成激情视频| 久久免费视频99| 免费亚洲视频在线观看| 亚洲色四在线视频观看| 免费中文字幕不卡视频| 91香蕉国产线观看免费全集| 国产成人va亚洲电影| 久久国产亚洲精品无码| 亚洲国产精品激情在线观看| 18禁美女黄网站色大片免费观看| 日韩国产欧美亚洲v片| 久久久久亚洲AV无码麻豆| 免费国产小视频在线观看| 日本妇人成熟免费中文字幕| 久久久久久国产a免费观看不卡| 亚洲色图激情文学| 亚洲AV日韩精品久久久久久 | 丝袜捆绑调教视频免费区| 中文字幕亚洲精品无码| 亚洲av无码乱码国产精品| 免费大片黄手机在线观看| 国产2021精品视频免费播放| 巨胸喷奶水www永久免费| 色偷偷尼玛图亚洲综合| 亚洲一区精彩视频| 7777久久亚洲中文字幕蜜桃| 国产国拍精品亚洲AV片| 国产在线观看www鲁啊鲁免费| 免费观看无遮挡www的小视频| 99久久免费国产精品热| 最好2018中文免费视频| 亚洲а∨精品天堂在线| 精品国产日韩久久亚洲| 亚洲欧洲尹人香蕉综合| 亚洲欧洲国产精品你懂的| 国产亚洲成av人片在线观看|