proxool連接池配置說明(與jdbc、Hibernate、Spring之間的配置)

proxool 簡單使用

首先從 http://proxool.sourceforge.net/下載
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

proxool.xml 代碼xml 代碼
  1. xmlversion="1.0"encoding="UTF-8"?>
  2. <something-else-entirely>
  3. <proxool>
  4. <alias>DBPoolalias>
  5. <driver-url>jdbc:oracle:thin:@192.168.0.40:1521:drcomdriver-url>
  6. <driver-class>oracle.jdbc.driver.OracleDriverdriver-class>
  7. <driver-properties>
  8. <propertyname="user"value="drcom"/>
  9. <propertyname="password"value="drcom"/>
  10. driver-properties>
  11. <house-keeping-sleep-time>90000house-keeping-sleep-time>
  12. <maximum-new-connections>150maximum-new-connections>
  13. <prototype-count>3prototype-count>
  14. <maximum-connection-count>100maximum-connection-count>
  15. <minimum-connection-count>3minimum-connection-count>
  16. proxool>
  17. something-else-entirely>

再在web.xml中進行配置,其中的ServletConfigurator是裝載WEB-INF目錄下的proxool.xml,並設置爲Tomcat啓動時就加載。Admin這個Servlet是proxool提供的察看連接池的信息的工具,


web.xml 代碼

xml 代碼
  1. xmlversion="1.0"encoding="UTF-8"?>
  2. <web-appversion="2.4"xmlns="http://java.sun.com/xml/ns/j2ee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
  5. http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  6. <servlet>
  7. <servlet-name>ServletConfiguratorservlet-name>
  8. <servlet-class>
  9. org.logicalcobwebs.proxool.configuration.ServletConfigurator
  10. servlet-class>
  11. <init-param>
  12. <param-name>xmlFileparam-name>
  13. <param-value>WEB-INF/proxool.xmlparam-value>
  14. init-param>
  15. <load-on-startup>1load-on-startup>
  16. servlet>
  17. <servlet>
  18. <servlet-name>Adminservlet-name>
  19. <servlet-class>
  20. org.logicalcobwebs.proxool.admin.servlet.AdminServlet
  21. servlet-class>
  22. servlet>
  23. <servlet-mapping>
  24. <servlet-name>Adminservlet-name>
  25. <url-pattern>/adminurl-pattern>
  26. servlet-mapping>
  27. <servlet>
  28. <servlet-name>TestServletservlet-name>
  29. <servlet-class>
  30. selfservice.TestServlet
  31. servlet-class>
  32. servlet>
  33. <servlet-mapping>
  34. <servlet-name>TestServletservlet-name>
  35. <url-pattern>/TestServleturl-pattern>
  36. servlet-mapping>
  37. web-app>


以上配置完成後,第三步就可以創建一個連接池的類了

java 代碼
  1. packageselfservice;
  2. importjava.sql.Connection;
  3. importjava.sql.DriverManager;
  4. importjava.sql.ResultSet;
  5. importjava.sql.SQLException;
  6. importjava.sql.Statement;
  7. importorg.logicalcobwebs.proxool.ProxoolException;
  8. importorg.logicalcobwebs.proxool.ProxoolFacade;
  9. importorg.logicalcobwebs.proxool.admin.SnapshotIF;
  10. publicclassPoolManager {
  11. privatestaticintactiveCount =0;
  12. publicPoolManager(){
  13. }
  14. /**
  15. * 獲取連接
  16. * getConnection
  17. * @param name
  18. * @return
  19. */
  20. publicConnection getConnection() {
  21. try{
  22. Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");//proxool驅動類
  23. Connection conn = DriverManager.getConnection("proxool.DBPool");
  24. //此處的DBPool是在proxool.xml中配置的連接池別名
  25. showSnapshotInfo();
  26. returnconn;
  27. }catch(Exception ex){
  28. ex.printStackTrace();
  29. }
  30. returnnull;
  31. }
  32. /**
  33. * 此方法可以得到連接池的信息
  34. * showSnapshotInfo
  35. */
  36. privatevoidshowSnapshotInfo(){
  37. try{
  38. SnapshotIF snapshot = ProxoolFacade.getSnapshot("DBPool",true);
  39. intcurActiveCount=snapshot.getActiveConnectionCount();//獲得活動連接數
  40. intavailableCount=snapshot.getAvailableConnectionCount();//獲得可得到的連接數
  41. intmaxCount=snapshot.getMaximumConnectionCount() ;//獲得總連接數
  42. if(curActiveCount!=activeCount)//當活動連接數變化時輸出的信息
  43. {
  44. System.out.println("活動連接數:"+curActiveCount+"(active) 可得到的連接數:"+availableCount+"(available) 總連接數:"+maxCount+"(max)");
  45. activeCount=curActiveCount;
  46. }
  47. }catch(ProxoolException e){
  48. e.printStackTrace();
  49. }
  50. }
  51. /**
  52. * 獲取連接
  53. * getConnection
  54. * @param name
  55. * @return
  56. */
  57. publicConnection getConnection(String name){
  58. returngetConnection();
  59. }
  60. /**
  61. * 釋放連接
  62. * freeConnection
  63. * @param conn
  64. */
  65. publicvoidfreeConnection(Connection conn){
  66. if(conn!=null){
  67. try{
  68. conn.close();
  69. }catch(SQLException e) {
  70. e.printStackTrace();
  71. }
  72. }
  73. }
  74. /**
  75. * 釋放連接
  76. * freeConnection
  77. * @param name
  78. * @param con
  79. */
  80. publicvoidfreeConnection (String name,Connection con){
  81. freeConnection(con);
  82. }
  83. publicvoidgetQuery() {
  84. try{
  85. Connection conn = getConnection();
  86. if(conn !=null){
  87. Statement statement = conn.createStatement();
  88. ResultSet rs = statement.executeQuery("select * from tblgxinterface");
  89. intc = rs.getMetaData().getColumnCount();
  90. while(rs.next()){
  91. System.out.println();
  92. for(inti=1;i<=c;i++){
  93. System.out.print(rs.getObject(i));
  94. }
  95. }
  96. rs.close();
  97. }
  98. freeConnection(conn);
  99. }catch(SQLException e) {
  100. e.printStackTrace();
  101. }
  102. }
  103. }


就這樣我們完成了一個連接池的功能。proxool的連接池我用loadrunner進行大併發的測試,性能還是很好的。

Hibernate中proxool連接池的方式:

首先步驟跟JDBC的連接池一樣,也是新建一個proxool.xml配置文件,再在web.xml中配置,具體參考上面。
第二步在hibernate的配置文件hibernate.cfg.xml中配置proxool連接設置:

hibernate.cfg.xml代碼xml 代碼
  1. <propertyname="hibernate.connection.provider_class">org.hibernate.connection.ProxoolConnectionProviderproperty>
  2. <propertyname="hibernate.proxool.pool_alias">DBPoolproperty>
  3. <propertyname="hibernate.proxool.xml">proxoolconf.xmlproperty>


Spring中proxool連接池的方式:

首先布驟與JDBC的連接池一樣,先建一個proxool.xml配置文件,再在web.xml中配置,具體參考上面的。
第二步在spring配置文件applicationContext.xml中配置proxool連接設置

applicationContext.xml代碼 xml 代碼
  1. <beanid="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"singleton="true">
  2. <propertyname="driverClassName"value="org.logicalcobwebs.proxool.ProxoolDriver"/>
  3. <propertyname="url"value="proxool.StatDBPool"/>
  4. bean>
  5. <beanid="transactionManager"
  6. class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  7. <propertyname="dataSource">
  8. <reflocal="dataSource"/>
  9. property>
  10. bean>

這樣spring就能得到一個dataSource的數據源。


proxool還有很多功能,我這只是簡單的應用。具體請察看proxool用戶指南。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章