proxool数据连接池总结

数据库连接池总结----Proxool

1、所需jar包: proxool-0.9.1.jar 和 proxool-cglib.jar
下载地址: http://sourceforge.net/projects/proxool/

2、通过 ProxoolDriver 取得 connection
Java代码 收藏代码
  1. publicConnectiongetConnectThrowProxoolDriver(){
  2. Connectionconnection=null;
  3. try{
  4. Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
  5. connection=DriverManager.getConnection(
  6. "proxool.test:org.gjt.mm.mysql.Driver:jdbc:mysql://localhost:3306/test",
  7. "root",
  8. "1234"
  9. );
  10. }catch(Exceptione){
  11. System.out.println(e);
  12. }
  13. returnconnection;
  14. }


3、使用 properties 或者 xml 来设置 DB URL 及 Driver
可以采用 xml 配置文件, 在程序中使用 JAXPConfigurator.configure("proxool.xml", false); 配置文件设置如下
Xml代码 收藏代码
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <!--
  3. theproxoolconfigurationcanbeembeddedwithinyourown
  4. application's.Anythingoutsidethe"proxool"tagisignored.
  5. -->
  6. <something-else-entirely>
  7. <proxool>
  8. <alias>dbname</alias><!--数据源的别名-->
  9. <driver-url>jdbc:mysql://localhost:3306/test</driver-url><!--url连接串-->
  10. <driver-class>org.gjt.mm.mysql.Driver</driver-class><!--驱动类-->
  11. <driver-properties>
  12. <propertyname="user"value="root"/><!--用户名-->
  13. <propertyname="password"value="1234"/><!--密码-->
  14. </driver-properties>
  15. <!--最大连接数(默认5个),超过了这个连接数,再有请求时,就排在队列中等候,最大的等待请求数由maximum-new-connections决定-->
  16. <maximum-connection-count>100</maximum-connection-count>
  17. <!--最小连接数(默认2个)-->
  18. <minimum-connection-count>10</minimum-connection-count>
  19. <!--proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁默认30秒-->
  20. <house-keeping-sleep-time>90000</house-keeping-sleep-time>
  21. <!--没有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受-->
  22. <maximum-new-connections>10</maximum-new-connections>
  23. <!--最少保持的空闲连接数(默认2个)-->
  24. <prototype-count>5</prototype-count>
  25. <!--在使用之前测试-->
  26. <test-before-use>true</test-before-use>
  27. <!--用于保持连接的测试语句-->
  28. <house-keeping-test-sql>selectnamefromtest</house-keeping-test-sql>
  29. </proxool>
  30. </something-else-entirely>


也可以采用 properties, 在程序 PropertyConfigurator.configure("proxool.properties"); 文件设置如下:
WEB-INF/proxool.properties
jdbc-0.proxool.alias=property-test
jdbc-0.proxool.driver-url=jdbc:mysql://localhost:3306/test
jdbc-0.proxool.driver-class=org.gjt.mm.mysql.Driver
jdbc-0.user=root
jdbc-0.password=password
jdbc-0.proxool.maximum-connection-count=10
jdbc-0.proxool.house-keeping-test-sql=select CURRENT_DATE


可以直接在Java程式中使用java.util.Properties设定
Java代码 收藏代码
  1. Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
  2. Propertiesinfo=newProperties();
  3. info.setProperty("proxool.maximum-connection-count","20");
  4. info.setProperty("proxool.house-keeping-test-sql","selectCURRENT_DATE");
  5. info.setProperty("user","root");
  6. info.setProperty("password","1234");
  7. Connectionconn=DriverManager.getConnection("proxool.example:com.mysql.jdbc.Driver:jdbc:mysql://localhost:3306/test",info);



4、如果在 Web 使用, 在 web.xml 也可以设置 ServletConfigurator Servlet 来注册

web.xml文件配置如下:
Xml代码 收藏代码
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <web-appid="WebApp_ID"version="2.4"
  3. xmlns="http://java.sun.com/xml/ns/j2ee"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  6. <servlet>
  7. <servlet-name>ServletConfigurator</servlet-name>
  8. <servlet-class>
  9. org.logicalcobwebs.proxool.configuration.ServletConfigurator
  10. </servlet-class>
  11. <init-param>
  12. <param-name>xmlFile</param-name>
  13. <param-value>WEB-INF/proxool.xml</param-value>
  14. </init-param>
  15. <load-on-startup>1</load-on-startup>
  16. </servlet>
  17. <!--
  18. 配置连接池的监视路径
  19. 检视pooling现在状态
  20. -->
  21. <servlet>
  22. <servlet-name>Admin</servlet-name>
  23. <servlet-class>
  24. org.logicalcobwebs.proxool.admin.servlet.AdminServlet
  25. </servlet-class>
  26. </servlet>
  27. <servlet-mapping>
  28. <servlet-name>Admin</servlet-name>
  29. <url-pattern>/admin</url-pattern>
  30. </servlet-mapping>
  31. <!--
  32. 配置受保护域,只有Tomcat管理员才能察看连接池的信息
  33. <security-constraint>
  34. <web-resource-collection>
  35. <web-resource-name>proxool</web-resource-name>
  36. <url-pattern>/admin</url-pattern>
  37. </web-resource-collection>
  38. <auth-constraint>
  39. <role-name>manager</role-name>
  40. </auth-constraint>
  41. </security-constraint>
  42. <login-config>
  43. <auth-method>BASIC</auth-method>
  44. <realm-name>proxoolmanagerApplication</realm-name>
  45. </login-config>
  46. <security-role>
  47. <description>
  48. TherolethatisrequiredtologintotheManager
  49. Application
  50. </description>
  51. <role-name>manager</role-name>
  52. </security-role>
  53. <error-page>
  54. <error-code>401</error-code>
  55. <location>/401.jsp</location>
  56. </error-page>
  57. -->
  58. </web-app>


获取Connection的程序代码如下:
Java代码 收藏代码
  1. publicConnectiongetConnect(){
  2. Connectionconn=null;
  3. try{
  4. conn=DriverManager.getConnection("proxool.dbname");
  5. }catch(SQLExceptione){
  6. e.printStackTrace();
  7. }
  8. returnconn;
  9. }



贴上自己的测试类:
Java代码 收藏代码
  1. packagecom.royzhou.db;
  2. importjava.sql.Connection;
  3. importjava.sql.DriverManager;
  4. importjava.sql.SQLException;
  5. importjava.util.Properties;
  6. importorg.logicalcobwebs.proxool.ProxoolException;
  7. importorg.logicalcobwebs.proxool.configuration.JAXPConfigurator;
  8. publicclassDBUtil{
  9. publicConnectiongetConnectThrowProxoolDriver(){
  10. Connectionconnection=null;
  11. try{
  12. Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
  13. connection=DriverManager.getConnection(
  14. "proxool.test:org.gjt.mm.mysql.Driver:jdbc:mysql://localhost:3306/test",
  15. "root",
  16. "1234"
  17. );
  18. }catch(Exceptione){
  19. System.out.println(e);
  20. }
  21. returnconnection;
  22. }
  23. /**
  24. *通过XML配置文件读取配置
  25. *@return
  26. */
  27. publicConnectiongetConnectThrowXMLConfig(){
  28. Connectionconnection=null;
  29. try{
  30. Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
  31. /**
  32. *需要使用绝对路径来设置,
  33. *因为proxool源代码没有做判断,
  34. *如果使用相对路径结果会报FileN
  35. *otFoundException
  36. */
  37. JAXPConfigurator.configure("F:\\workspace\\proxool\\proxool\\WEB-INF\\proxool.xml",false);//false表示不验证
  38. connection=DriverManager.getConnection("proxool.test");//proxool.test这里的test必须与配置文件配置的别名相同
  39. }catch(ClassNotFoundExceptione){
  40. e.printStackTrace();
  41. }catch(ProxoolExceptione){
  42. e.printStackTrace();
  43. }catch(SQLExceptione){
  44. e.printStackTrace();
  45. }
  46. returnconnection;
  47. }
  48. /**
  49. *通过properties配置文件读取配置
  50. *@return
  51. */
  52. publicConnectiongetConnectThrowPropConfig(){
  53. Connectionconnection=null;
  54. try{
  55. Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
  56. /**
  57. *需要使用绝对路径来设置,
  58. *因为proxool源代码没有做判断,
  59. *如果使用相对路径结果会报FileN
  60. *otFoundException
  61. */
  62. org.logicalcobwebs.proxool.configuration.PropertyConfigurator.configure("F:\\workspace\\proxool\\proxool\\WEB-INF\\proxool.properties");
  63. connection=DriverManager.getConnection("proxool.test");//proxool.test这里的test必须与配置文件配置的别名相同
  64. }catch(ClassNotFoundExceptione){
  65. e.printStackTrace();
  66. }catch(ProxoolExceptione){
  67. e.printStackTrace();
  68. }catch(SQLExceptione){
  69. e.printStackTrace();
  70. }
  71. returnconnection;
  72. }
  73. /**
  74. *直接在代码中设置props
  75. *@return
  76. */
  77. publicConnectiongetConnectThrowProp(){
  78. Connectionconn=null;
  79. Propertiesinfo=newProperties();
  80. info.setProperty("proxool.alias","test");
  81. info.setProperty("proxool.maximum-connection-count","20");
  82. info.setProperty("proxool.house-keeping-test-sql","selectCURRENT_DATE");
  83. info.setProperty("user","root");
  84. info.setProperty("password","1234");
  85. try{
  86. Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
  87. conn=DriverManager.getConnection("proxool.test:com.mysql.jdbc.Driver:jdbc:mysql://localhost:3306/test",info);
  88. }catch(ClassNotFoundExceptione){
  89. e.printStackTrace();
  90. }catch(SQLExceptione){
  91. e.printStackTrace();
  92. }
  93. returnconn;
  94. }
  95. /**
  96. *WEB应用
  97. *Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
  98. *JAXPConfigurator.configure("WEB-INF/proxool.xml",false);
  99. *Connectionconn=DriverManager.getConnection("proxool.dbname");
  100. *报FileNotFoundException,找不到原因
  101. *所以使用ServletConfigurator,查看proxool源代码发现
  102. *ServletConfigurator加载配置文件的时候做了判断
  103. *StringappDir=servletConfig.getServletContext().getRealPath("/");
  104. *Filefile=newFile(value);
  105. *if(file.isAbsolute()){
  106. *JAXPConfigurator.configure(value,false);
  107. *}else{
  108. *JAXPConfigurator.configure(appDir+File.separator+value,false);
  109. *}
  110. *@return
  111. */
  112. publicConnectiongetConnectThrowWeb(){
  113. Connectionconn=null;
  114. try{
  115. conn=DriverManager.getConnection("proxool.dbname");
  116. }catch(SQLExceptione){
  117. e.printStackTrace();
  118. }
  119. returnconn;
  120. }
  121. publicstaticvoidmain(String[]args){
  122. System.out.println(newDBUtil().getConnectThrowXMLConfig());
  123. }
  124. }



以上代码仅供测试使用,实际开发中Connection使用完成之后都必须做相应的关闭操作。。

转自:http://royzhou1985.iteye.com/blog/423519

你可能感兴趣的:(proxool)