天天看點

proxool配置詳解

proxool一個資料庫連接配接池架構,提供了對你選擇的其它類型的驅動程式的連接配接池封裝。可以非常簡單的移植到現存的代碼中。

<?xml version=”1.0” encoding=”utf-8”?>

<something-else-entriely>

       <proxool>

              <alias>dbname</alias><!—資料源的别名-->

              <driver-url>jdbc:oracle:thin:@127.0.0.1:1521:testdb</driver-url><!—url連接配接串-->

       <driver-class>oracle</driver-class><!—驅動類-->

       <driver-properties>

              <property name=”user” value=”username”/><!—使用者名-->

              <property name=”password” value=”password”/><!—密碼-->

</driver-properties>

<!—最大連接配接數(預設5個),超過了這個連接配接數,再有請求是,就排在隊列中等待,最大的等待請求書又maximum-new-connections決定-->

<maximum-connection-count>100</maximum-connection-count>

<!—最小連接配接數(預設2個)-->

<minimum-connection-count>10</minimum-connection-count>

       <!—proxool自動偵探各個連接配接狀态的時間間隔(毫秒),偵探到空閑的就馬上收回,逾時的銷毀 

預設30秒-->

       <house-keeping-sleep-time>90000</house-keeping-sleep-time>

       <!—沒有空閑連接配接可以配置設定而在隊列中等候的最大請求書,超過這個請求數的使用者連接配接就不會被接受-->

       <maximum-new-connections>400</maximum-new-connections>

       <!—最少保持的空閑連接配接數(預設2個)-->

       <prototype-count>5</prototype-count>

       <!—在使用之前測試-->

       <test-before-use>true</test-before-use>

       <!—使用者保持連接配接的測試語句—>

       <house-keeping-test-sql>select sysdate from dual</house-keeping-test-sql>

</proxool>

</something-else-entriely>

配置web.xml

<?xml version="1.0" encoding="utf-8"?>  

<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"

    xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"

    xsi:schemalocation="http://java.sun.com/xml/ns/j2ee    

    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  

<servlet>  

    <servlet-name>servletconfigurator</servlet-name>

    <servlet-class>org.logicalcobwebs.proxool.configuration.servletconfigurator</servlet-class>

    <init-param>

       <param-name>xmlfile</param-name>  

       <param-value>web-inf/proxool.xml</param-value> 

    </init-param>

    <load-on-startup>1</load-on-startup>

</servlet>  

    <servlet-name>admin</servlet-name>  

    <servlet-class>org.logicalcobwebs.proxool.admin.servlet.adminservlet</servlet-class>

</servlet>

<servlet-mapping>

    <servlet-name>admin</servlet-name> 

   <url-pattern>/admin</url-pattern>  

</servlet-mapping>

<!-- 配置受保護域,隻有tomcat管理者才能察看連接配接池的資訊 -->  

<security-constraint>  

 <web-resource-collection>  

    <web-resource-name>proxool</web-resource-name>

     <url-pattern>/admin</url-pattern>

 </web-resource-collection>

 <auth-constraint>

   <role-name>manager</role-name>

    </auth-constraint>

 </security-constraint>

<login-config>

       <auth-method>basic</auth-method>

        <realm-name>proxool manager application</realm-name>

</login-config>

<security-role>

<description>the role that is required to log in to the manager application</description>

<role-name>manager</role-name>

</security-role>

<error-page>

<error-code>401</error-code>

<location>/401.jsp</location>

</error-page>

</web-app>

servletconfigurator:加載并初始化proxool.xml檔案,因為它是連接配接資料庫的。其他很多子產品都用到資料,是以必須首先加載它

load-on-startup:數值越小,就會先被加載初始化

admin:監控資料庫連接配接池連接配接情況

//獲得資料庫的語句

connection conn = drivermanager.getconnection(“proxool.dbname”);

proxool.xml配置屬性說明

xml代碼:

<?xml

version="1.0"

encoding="iso-8859-1"?> 

<something-else-entirely

xmlns="http://sumthin.else.entirely"

xmlns:proxool="the latest version is available at http://proxool.sourceforge.net/xml-namespace"> 

   <proxool:proxool> 

       <proxool:alias>xml-test-ns</proxool:alias> 

       <proxool:driver-url>jdbc:hsqldb:db/test</proxool:driver-url> 

        <proxool:driver-class>org.hsqldb.jdbcdriver</proxool:driver-class> 

        <proxool:driver-properties> 

            <proxool:property

name="user"

value="sa"/> 

name="password"

value=""/> 

        </proxool:driver-properties> 

        <proxool:house-keeping-sleep-time>40000</proxool:house-keeping-sleep-time> 

        <proxool:house-keeping-test-sql>select current_date</proxool:house-keeping-test-sql> 

        <proxool:maximum-connection-count>10</proxool:maximum-connection-count> 

        <proxool:minimum-connection-count>3</proxool:minimum-connection-count> 

        <proxool:maximum-connection-lifetime>18000000</proxool:maximum-connection-lifetime><!--

5 hours --> 

        <proxool:simultaneous-build-throttle>5</proxool:simultaneous-build-throttle> 

        <proxool:recently-started-threshold>40000</proxool:recently-started-threshold> 

        <proxool:overload-without-refusal-lifetime>50000</proxool:overload-without-refusal-lifetime> 

        <proxool:maximum-active-time>60000</proxool:maximum-active-time> 

        <proxool:verbose>true</proxool:verbose> 

        <proxool:trace>true</proxool:trace> 

        <proxool:fatal-sql-exception>fatal error</proxool:fatal-sql-exception> 

        <proxool:prototype-count>2</proxool:prototype-count> 

    </proxool:proxool> 

    <nothing-to-do-with-proxool> 

        <proxool:proxool> 

            <proxool:alias>xml-test-ns-2</proxool:alias> 

            <proxool:driver-url>jdbc:hsqldb:db/test</proxool:driver-url> 

            <proxool:driver-class>org.hsqldb.jdbcdriver</proxool:driver-class> 

            <proxool:driver-properties> 

                <proxool:property

                <proxool:property

            </proxool:driver-properties> 

            <proxool:house-keeping-sleep-time>40000</proxool:house-keeping-sleep-time> 

            <proxool:house-keeping-test-sql>select current_date</proxool:house-keeping-test-sql> 

            <proxool:maximum-connection-count>10</proxool:maximum-connection-count> 

            <proxool:minimum-connection-count>3</proxool:minimum-connection-count> 

            <proxool:maximum-connection-lifetime>18000000</proxool:maximum-connection-lifetime><!--

            <proxool:simultaneous-build-throttle>5</proxool:simultaneous-build-throttle> 

            <proxool:recently-started-threshold>40000</proxool:recently-started-threshold> 

            <proxool:overload-without-refusal-lifetime>50000</proxool:overload-without-refusal-lifetime> 

            <proxool:maximum-active-time>60000</proxool:maximum-active-time> 

            <proxool:verbose>true</proxool:verbose> 

            <proxool:trace>true</proxool:trace> 

            <proxool:fatal-sql-exception>fatal error</proxool:fatal-sql-exception> 

            <proxool:prototype-count>2</proxool:prototype-count> 

        </proxool:proxool> 

    </nothing-to-do-with-proxool> 

</something-else-entirely>

屬性清單說明:

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:

一個線程的最大壽命.

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 值