proxool 簡單使用
proxool-0.9.0RC2.zip
解壓後,把proxool-0.9.0RC2.jar放到工程的lib文件夾裏面。
proxool是一個非常強大的連接池工具包,我覺得相比dbcp、c3p0這兩個連接池包都要好用,我用loadrunner測試過,這三個連接池的從性能上排名如下:proxool>c3p0>dbcp,特別是dbcp在大併發的情況下總是出現各種異常。詳細關於dbcp的介紹請參考dbcp用戶指南,dbcp實現參考tvjody.javaeye.com/admin/show/117225。
Ps:proxool-0.9.0RC2.zip下載包放在了:http://download.csdn.net/detail/yaowanpengliferay/5190005
下面是實現proxool的幾種方式:
JDBC連接方法:
首先建一個proxool的配置文件proxool.xml
- xmlversion="1.0"encoding="UTF-8"?>
- <something-else-entirely>
- <proxool>
- <alias>DBPoolalias>
- <driver-url>jdbc:oracle:thin:@192.168.0.40:1521:drcomdriver-url>
- <driver-class>oracle.jdbc.driver.OracleDriverdriver-class>
- <driver-properties>
- <propertyname="user"value="drcom"/>
- <propertyname="password"value="drcom"/>
- driver-properties>
- <house-keeping-sleep-time>90000house-keeping-sleep-time>
- <maximum-new-connections>150maximum-new-connections>
- <prototype-count>3prototype-count>
- <maximum-connection-count>100maximum-connection-count>
- <minimum-connection-count>3minimum-connection-count>
- proxool>
- something-else-entirely>
再在web.xml中進行配置,其中的ServletConfigurator是裝載WEB-INF目錄下的proxool.xml,並設置爲Tomcat啓動時就加載。Admin這個Servlet是proxool提供的察看連接池的信息的工具,
web.xml 代碼
- xmlversion="1.0"encoding="UTF-8"?>
- <web-appversion="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>ServletConfiguratorservlet-name>
- <servlet-class>
- org.logicalcobwebs.proxool.configuration.ServletConfigurator
- servlet-class>
- <init-param>
- <param-name>xmlFileparam-name>
- <param-value>WEB-INF/proxool.xmlparam-value>
- init-param>
- <load-on-startup>1load-on-startup>
- servlet>
- <servlet>
- <servlet-name>Adminservlet-name>
- <servlet-class>
- org.logicalcobwebs.proxool.admin.servlet.AdminServlet
- servlet-class>
- servlet>
- <servlet-mapping>
- <servlet-name>Adminservlet-name>
- <url-pattern>/adminurl-pattern>
- servlet-mapping>
- <servlet>
- <servlet-name>TestServletservlet-name>
- <servlet-class>
- selfservice.TestServlet
- servlet-class>
- servlet>
- <servlet-mapping>
- <servlet-name>TestServletservlet-name>
- <url-pattern>/TestServleturl-pattern>
- servlet-mapping>
- web-app>
以上配置完成後,第三步就可以創建一個連接池的類了
java 代碼
- packageselfservice;
- importjava.sql.Connection;
- importjava.sql.DriverManager;
- importjava.sql.ResultSet;
- importjava.sql.SQLException;
- importjava.sql.Statement;
- importorg.logicalcobwebs.proxool.ProxoolException;
- importorg.logicalcobwebs.proxool.ProxoolFacade;
- importorg.logicalcobwebs.proxool.admin.SnapshotIF;
- publicclassPoolManager {
- privatestaticintactiveCount =0;
- publicPoolManager(){
- }
- /**
- * 獲取連接
- * getConnection
- * @param name
- * @return
- */
- publicConnection getConnection() {
- try{
- Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");//proxool驅動類
- Connection conn = DriverManager.getConnection("proxool.DBPool");
- //此處的DBPool是在proxool.xml中配置的連接池別名
- showSnapshotInfo();
- returnconn;
- }catch(Exception ex){
- ex.printStackTrace();
- }
- returnnull;
- }
- /**
- * 此方法可以得到連接池的信息
- * showSnapshotInfo
- */
- privatevoidshowSnapshotInfo(){
- try{
- SnapshotIF snapshot = ProxoolFacade.getSnapshot("DBPool",true);
- intcurActiveCount=snapshot.getActiveConnectionCount();//獲得活動連接數
- intavailableCount=snapshot.getAvailableConnectionCount();//獲得可得到的連接數
- intmaxCount=snapshot.getMaximumConnectionCount() ;//獲得總連接數
- if(curActiveCount!=activeCount)//當活動連接數變化時輸出的信息
- {
- System.out.println("活動連接數:"+curActiveCount+"(active) 可得到的連接數:"+availableCount+"(available) 總連接數:"+maxCount+"(max)");
- activeCount=curActiveCount;
- }
- }catch(ProxoolException e){
- e.printStackTrace();
- }
- }
- /**
- * 獲取連接
- * getConnection
- * @param name
- * @return
- */
- publicConnection getConnection(String name){
- returngetConnection();
- }
- /**
- * 釋放連接
- * freeConnection
- * @param conn
- */
- publicvoidfreeConnection(Connection conn){
- if(conn!=null){
- try{
- conn.close();
- }catch(SQLException e) {
- e.printStackTrace();
- }
- }
- }
- /**
- * 釋放連接
- * freeConnection
- * @param name
- * @param con
- */
- publicvoidfreeConnection (String name,Connection con){
- freeConnection(con);
- }
- publicvoidgetQuery() {
- try{
- Connection conn = getConnection();
- if(conn !=null){
- Statement statement = conn.createStatement();
- ResultSet rs = statement.executeQuery("select * from tblgxinterface");
- intc = rs.getMetaData().getColumnCount();
- while(rs.next()){
- System.out.println();
- for(inti=1;i<=c;i++){
- System.out.print(rs.getObject(i));
- }
- }
- rs.close();
- }
- freeConnection(conn);
- }catch(SQLException e) {
- e.printStackTrace();
- }
- }
- }
就這樣我們完成了一個連接池的功能。proxool的連接池我用loadrunner進行大併發的測試,性能還是很好的。
Hibernate中proxool連接池的方式:
首先步驟跟JDBC的連接池一樣,也是新建一個proxool.xml配置文件,再在web.xml中配置,具體參考上面。
第二步在hibernate的配置文件hibernate.cfg.xml中配置proxool連接設置:
- <propertyname="hibernate.connection.provider_class">org.hibernate.connection.ProxoolConnectionProviderproperty>
- <propertyname="hibernate.proxool.pool_alias">DBPoolproperty>
- <propertyname="hibernate.proxool.xml">proxoolconf.xmlproperty>
Spring中proxool連接池的方式:
首先布驟與JDBC的連接池一樣,先建一個proxool.xml配置文件,再在web.xml中配置,具體參考上面的。
第二步在spring配置文件applicationContext.xml中配置proxool連接設置
- <beanid="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"singleton="true">
- <propertyname="driverClassName"value="org.logicalcobwebs.proxool.ProxoolDriver"/>
- <propertyname="url"value="proxool.StatDBPool"/>
- bean>
- <beanid="transactionManager"
- class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
- <propertyname="dataSource">
- <reflocal="dataSource"/>
- property>
- bean>
這樣spring就能得到一個dataSource的數據源。
proxool還有很多功能,我這只是簡單的應用。具體請察看proxool用戶指南。