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 值