zoukankan      html  css  js  c++  java
  • 数据库连接池总结 Proxool

    1.proxool.jar文件可以在http://sourceforge.net/projects/proxool/下载得到。
    2.SECTION 01 为何需要 connection pooling

    当 我们进入了 Java 的开发世界, pool 也是一门学问, 如何让 connection 先建立好与 DB 的连结, 后来的人可以使用已经存在于 pool 的 connection, 减少连结的时间, 这么优秀的功能, 在许多 application server 都已经实现好了, 你只要简单地按照说明文件配置, 包括最大连结数量, 初始连结数量, 最大等待数量等等的参数, 当然, Tomcat 也有内建 commons-dbcp 相关的 connection pooling 机制, 请查阅 Tomcat JNDI Datasource 设定!!


    而 proxool 是一个强大的 connection pooling 项目, 兼容于 jdk 1.3 以及 1.4. 也已经实现了 监控, 纪录等等的功能, 对于一个有限制 connection 数量, 及注重 performation 的项目来说, 是一套非常完整的解决方案.

    下载区, 目前版本 0.7.2

    http://sourceforge.net/projects/proxool/


    SECTION 02 设置 AdminServlet

    首先, 你要把下载 proxool 的 lib 下面所有的 jar 文件, 放到 WEB-INF/lib 下面,

    另外, 把你的 jdbc driver 也放到相同的 lib,

    接著就是配置 /WEB-INF/web.xml
    web.xml<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "/WEB-INF/dtds/web-app_2_3.dtd"><web-app><display-name>proxool</display-name><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> </web-app>



    SECTION 03 通过 ProxoolDriver 取得 connection

    建立一个 jsp or DAO Bean, 通过 org.logicalcobwebs.proxool.ProxoolDriver 建立 Connection


    test.jsp<%@page import="java.sql.*"%><%Connection connection = null;try {Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");connection = DriverManager.getConnection("proxool.test:org.gjt.mm.mysql.Driver:jdbc:mysql://localhost:3306/test","root","password");} catch (Exception e) {	out.println(e)}out.println("OK");%>



    SECTION 04 检视 pooling 现在状态

    执 行 http://localhost:8080/proxool-test/admin ( proxool-test 是你的应用名称 ) 如果没有任何 pool 状态的时候, 你只会看到 Pools 这几个字, 所以你先执行 http://localhost:8080/proxool-test/test.jsp 建立一个 connection, 就可以监控 connection pooling 的状态了.

    Pools
    > test -> jdbc:mysql://www:3306/test

    Defintition for test
    URL jdbc:mysql://localhost:3306/test
    Driver org.gjt.mm.mysql.Driver
    Connections 0 (min), 15 (max)
    Prototyping off
    Connection Lifetime 11:00:00
    Maximum active time 07:05:00
    House keeping sleep time 30s
    House keeping test SQL off
    Fatal SQL exceptions off
    Statistics off

    Snapshot at 21:12:53
    Start date 01-??-2003 21:12:30
    Connections 1 (active), 0 (available), 15 (max)
       
    Served 1
    Refused 0
    Details
    # born last
    start
    lap
    (ms)
     thread
    1  21:12:31  21:12:31 22432    Thread-15
    less information

    Proxool 0.7.2 (29-Apr-2003 00:33)



    SECTION 05 使用 properties 或者 xml 来设置 DB URL 及 Driver

    可以采用 xml 配置文件, 在程序中使用 JAXPConfigurator.configure("proxool.xml", false); 配置文件设置如下
    WEB-INF/proxool.xml<?xml version="1.0" encoding="ISO-8859-1"?><!-- the proxool configuration can be embedded within your own application's.Anything outside the "proxool" tag is ignored. --><something-else-entirely>  <proxool>    <alias>xml-test</alias>    <driver-url>jdbc:mysql://localhost:3306/test</driver-url>    <driver-class>org.gjt.mm.mysql.Driver</driver-class>    <driver-properties>      <property name="user" value="root"/>      <property name="password" value="password"/>    </driver-properties>    <maximum-connection-count>10</maximum-connection-count>    <house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>  </proxool></something-else-entirely>






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






    如果在 Web 使用, 在 web.xml 也可以设置 ServletConfigurator Servlet 来注册
    <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""/WEB-INF/dtds/web-app_2_3.dtd"><web-app>	<display-name>proxool</display-name>	<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>	  <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> </web-app>
    在程序中, 只需要利用到别名就可以呼叫 connection pool 里面的 connection 来使用了
    <%@page import="java.sql.*;"%><%Connection connection = null;try {	Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");	connection = DriverManager.getConnection("proxool.xml-test");} catch (Exception e) {	out.println(e);}out.println("ok");%>



    SECTION 06 使用 connection.close() 关闭 connection

    以 上的范例我都没有写 close, 希望大家在 connection 做完之后记得使用 close() 来关闭, 将 connection 还到 pool , 以免有 java.sql.SQLException: org.logicalcobwebs.proxool.ProxoolException: ConnectionCount is 10. Maximum connection count of 10 cannot be exceeded. 的现象发生.

    3.
     Proxool 提供許多方式可以設定相關的參數,這邊先介紹三種,另外還可以直接在Web應用程式中進行設定的方法,這在下一個主題中再說明。
    可以直接在Java程式中使用java.util.Properties設定,例如:
    Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");Properties info = new Properties();info.setProperty("proxool.maximum-connection-count", "20");info.setProperty("proxool.house-keeping-test-sql", "select CURRENT_DATE");info.setProperty("user", "caterpillar");info.setProperty("password", "123456");Connection conn = DriverManager.getConnection("proxool.example:com.mysql.jdbc.Driver:jdbc:mysql://localhost:3306/GUESTBOOK", info);

    當然這種方式是硬編碼(hard code)在程式中,要改變參數時必須修改原始檔案並重新編譯,我們也可以使用XML檔案或屬性檔來進行設定,使用XML檔案的方式如下:
    proxool.xml
    <?xml version="1.0" encoding="ISO-8859-1"?><something-else-entirely>  <proxool>    <alias>example</alias>    <driver-url>jdbc:mysql://localhost:3306/GUESTBOOK</driver-url>    <driver-class>com.mysql.jdbc.Driver</driver-class>    <driver-properties>      <property name="user" value="caterpillar"/>      <property name="password" value="123456"/>    </driver-properties>    <maximum-connection-count>10</maximum-connection-count>    <house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>  </proxool></something-else-entirely>

    其中example是連接池的別名(Alias),我們使用org.logicalcobwebs.proxool.configuration.JAXPConfigurator來讀取XML,以下的示範如何取得連線:
    Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");JAXPConfigurator.configure("proxool.xml", false); // false 表示不驗證 XMLConnection conn = DriverManager.getConnection("proxool.example");

    我們也可以使用屬性檔來配置Proxool,屬性檔的內容如下:
    proxool.properties
    jdbc-0.proxool.alias=examplejdbc-0.proxool.driver-url=jdbc:mysql://localhost:3306/GUESTBOOKjdbc-0.proxool.driver-class=com.mysql.jdbc.Driverjdbc-0.user=caterpillarjdbc-0.password=123456jdbc-0.proxool.maximum-connection-count=10jdbc-0.proxool.house-keeping-test-sql=select CURRENT_DATE

    我們使用org.logicalcobwebs.proxool.configuration.PropertyConfigurator來讀取屬性檔,下面示範如何取得連線:
    Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");org.logicalcobwebs.proxool.configuration.PropertyConfigurator.configure("proxool.properties");Connection conn = DriverManager.getConnection("proxool.example");
     
  • 相关阅读:
    了解 Spring Data JPA
    Spring MVC 方法注解拦截器
    Spring MVC拦截器+注解方式实现防止表单重复提交
    java中return语句的用法总结
    equal方法在String类与Object类中的区别
    instanceof用法
    EL 简介及用法
    JAVA 四大域对象总结
    JSP基本语法
    Servlet请求转发 RequestDispatcher接口知识点
  • 原文地址:https://www.cnblogs.com/pony/p/1235778.html
Copyright © 2011-2022 走看看