在資料庫應用程式中,資料庫連線的取得是一個耗費時間的動作,為了避免花費時間在連線的取得與關閉上,我們會將連線資源放置在一個池中,有需要連線時就從池中取得,不需要連線時就將之放回池中,以求重複利用連線,連線池也擔任連線數量、連線時間的控制等等動作。

 Proxool 是一個開放原始碼的連線池管理套件,在使用與設定上都十分的方便,撰寫此文的同時,Proxool 最新的版本是0.8.3,您可以在以下的網址下載:
http://proxool.sourceforge.net/index.html

 網站上的User Guide提供相當簡明的入門文件,您可以直接先從這些文件開始下手,而這篇文件則先提供您一個快速入門的範例,讓您知道如何透過Proxool取得資料庫連線,這邊所使用的是MySQL資料庫。

 為了要使用Java來進行連線,首先您所需要的是當然是JDBC驅動程式,如果您不知道如何使用JDBC,請先參考這邊有關於JDBC的介紹:
http://www.caterpillar.onlyfun.net/phpBB2/viewforum.php?f=21

 接下來請在Proxool網址上取得proxool-0.8.3.zip這個檔案,解開後,將lib下的proxool-0.8.3.jar放至您的 CLASSPATH可以存取的位置,如果是Web應用程式的話,您可以放置在WEB/lib目錄下,如果是桌面應用程式,您可以將之加入環境變數 CLASSPATH中。

 要使用Proxool,首先是載入Proxool驅動程式:

Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");

 接著我們在透過DriverManager取得連線時,必須告知連接池別名、JDBC驅動程式、JDBC URL等相關訊息:

Connection conn =
DriverManager.getConnection("proxool.example:com.mysql.jdbc.Driver:jdbc:mysql://localhost:3306/GUESTBOOK",
"caterpillar",
"123456");

 其中example是連接池的別名(alias),是一個用來參考至連接池的名稱,取得連接,接下來就按照JDBC的操作來使用即可,在不使用連線的時候,可以關閉它將連線放回連接池。

 下面這個程式是個簡單測試Proxool連線取得的範例:

DBTest.java
import java.sql.*;
public class DBTest {
static {
try {
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
}
catch(ClassNotFoundException e) {
System.out.println("找不到驅動程式類別");
e.printStackTrace();
}
}
public static void main(String[] args) {
try {
Connection conn = DriverManager.getConnection(
"proxool.example:com.mysql.jdbc.Driver:jdbc:mysql://localhost:3306/GUESTBOOK",
 "caterpillar", "123456");
if(!conn.isClosed())
System.out.println("資料庫連線測試成功!");
conn.close();
}
catch(SQLException e) {
e.printStackTrace();
}
}
}

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 表示不驗證 XML
Connection conn = DriverManager.getConnection("proxool.example");

 我們也可以使用屬性檔來配置Proxool,屬性檔的內容如下:

proxool.properties
jdbc-0.proxool.alias=example
jdbc-0.proxool.driver-url=jdbc:mysql://localhost:3306/GUESTBOOK
jdbc-0.proxool.driver-class=com.mysql.jdbc.Driver
jdbc-0.user=caterpillar
jdbc-0.password=123456
jdbc-0.proxool.maximum-connection-count=10
jdbc-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");

除了直接使用JAXPConfigurator從XML或屬性檔讀取組態設定之外,如果您正在運行Web 應用程式,您可以透過org.logicalcobwebs.proxool.configuration.ServletConfigurator,將之設定為Servlet,並於Container一啟始時就載入Proxool以初始連接池,要這麼作,請將proxool-0.8.3.jar放到 WEB/lib目錄中。

 使用ServletConfigurator時,您有三種方式可以設定相關參數給它,透過XML、透過屬性檔、透過設定Servlet初始參數。

 首先是透過XML檔案,XML檔案的設定請參考前一個主題,在web.xml中,您可以這麼設定:

web.xml
<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>

 再來是透過屬性檔,屬性檔的設定請參考前一個主題,在web.xml中,您可以這麼設定:

web.xml
<servlet>
<servlet-name>ServletConfigurator</servlet-name>
<servlet-class>org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class>
<init-param>
<param-name>propertyFile</param-name>
<param-value>WEB-INF/proxool.properties</param-value>
</init-param>
</servlet>

 上面兩種作法,其實ServletConfigurator也各是委託JAXPConfigurator或PropertyConfigurator來讀取組態設定;您也可以不透過檔案設定組態,而直接在web.xml中透過Servlet初始參數的設定來指定相關參數:

web.xml
<servlet>
<servlet-name>ServletConfigurator</servlet-name>
<servlet-class>org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class>
<init-param>
<param-name>jdbc-0.proxool.alias</param-name>
<param-value>example</param-value>
</init-param>
<init-param>
<param-name>jdbc-0.proxool.driver-url</param-name>
<param-value>jdbc:mysql://localhost:3306/GUESTBOOK</param-value>
  </init-param>
<init-param>
<param-name>jdbc-0.proxool.driver-class</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</init-param>
<init-param>
<param-name>jdbc-0.user</param-name>
<param-value>caterpillar</param-value>
</init-param>
<init-param>
<param-name>jdbc-0.password</param-name>
<param-value>123456</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

 取得連線的方式只要下面這句就行了:

Connection conn = DriverManager.getConnection("proxool.example");

 下面這個JSP簡單的測試一下是否可以取得連線:

<%@page import="java.sql.*"%>
<%@page contentType="text/html;charset=Big5"%>
<%
try {
Connection conn = DriverManager.getConnection("proxool.example");
if(!conn.isClosed())
out.println("資料庫連線測試成功!");
conn.close();
}
catch(SQLException e) {
out.println(e.toString());
}
%>

Proxool 提供了一些方法可以讓您取得連線池的相關統計資料,例如您可以使用org.logicalcobwebs.proxool.admin.SnapshotIF來取得連線池目前使用狀態的資訊:

SnapshotIF snapshot = ProxoolFacade.getSnapshot("example", true);
System.out.println(snapshot.getActiveConnectionCount());
System.out.println(snapshot.getMaximumConnectionCount());
....

 true 表示取得詳細的連線池訊息;您也可以對連線池的資料進行定時統計,這必須在XML或屬性檔中設定統計的時間,例如在XML中增加以下內容:

proxool.xml
<proxool>
....
<statistics>1m,15m,1d</statistics>
</proxool>

 統計的時隔可以分為s(econds),、m(inutes)、h(ours)與d(ays),就上面的設定來說,就是依分鐘、五分鐘、一天分別作統計,如果是在屬性檔案中設定,則增加:

proxool.properties
jdbc-0.proxool.statistics=1m,15m,1d

 如果要取得統計資訊,可以從org.logicalcobwebs.proxool.admin.StatisticsIF取得,例如取得所有的統計資料:

StatisticsIF[] statisticsArray = ProxoolFacade.getStatistics("example");

 接下來就可以使用StatisticsIF的getXXX()方法來取得相關的訊息,您也可以指定取回某個時間的統計資訊,例如每15分鐘的統計資料:

StatisticsIF statistics = ProxoolFacade.getStatistics("example", "15m");

 如果您使用Web應用程式,則可以直接利用org.logicalcobwebs.proxool.admin.servlet.AdminServlet來取得相關的統計資料,在web.xml中這麼設定:

web.xml
<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>

 啟動Container,在測試資料庫後,您就可以連接Servlet取得連線統計訊息,例如:

http://網址/Web程式名稱/admin

 

Proxool - 快速入門相关推荐

  1. GeoGebra 與數學探索 1 GeoGebra 入門到進階之整體介紹

    免費的動態數學軟體 GeoGebra 入門與數學探索上的應用 賴鵬仁 國立高雄師範大學數學系 Goal: GeoGebra 除了可以輕鬆的讓我們以即時動態反饋圖形的方式模擬探索幾何的問題, 或是幫我們 ...

  2. (轉貼) 善用Google從入門到精通 (Misc)

    善用GOOGLE  -- 從入門到精通 (DOC 簡體字版由網站下載,原作者不詳) 修正版:方煒 台大生機系 一        GOOGLE簡介... 2 二        GOOGLE特色... 2 ...

  3. 好书推荐:《零基础快速入行入职软件测试工程师》学测试一本就

    推荐理由: 全面介绍软件测试的基础知识,帮助零基础读者快速入门! 详细讲解自动化测试和接口测试,帮助读者快速进阶! 深入解析操作系统和数据库,帮助读者进一步提高测试水平! 本书具有以下特点: 1.对初 ...

  4. Unity 2D游戏开发快速入门第1章创建一个简单的2D游戏

    Unity 2D游戏开发快速入门第1章创建一个简单的2D游戏 即使是现在,很多初学游戏开发的同学,在谈到Unity的时候,依然会认为Unity只能用于制作3D游戏的.实际上,Unity在2013年发布 ...

  5. Hibernate 3 入門

    Hibernate 3 入門 台湾 良葛格  ,比较详细,按照开发步骤讲解的Hibernate学习资料,个人觉得比那本中文版的Hibernate参考手册要有可操作性的多.地址:http://www.j ...

  6. Delphi APP 開發入門(五)GPS 定位功能

    Delphi APP 開發入門(五)GPS 定位功能 分享: Share on facebookShare on twitterShare on google_plusone_share 閲讀次數:3 ...

  7. COBOL 学习笔记 之 入門篇(续集)

    书接上一回(COBOL 学习笔记 之 入門篇 ) 从程序可以看到,COBOL程序分为四部分: IDENTIFICATION DIVISION.  ENVIRONMENT    DIVISION.  D ...

  8. mysql2012更改表名_T-SQL入門攻略之13-修改数据表

    --> Title  : T-SQL入門攻略之13-修改数据表 --> Author : wufeng4552 --> Date   : 2010-07-12 修改表名与字段名-sp ...

  9. 美术零基础转行做游戏美术3D,如何快速入行?

    3D打印的玩偶.开车出门地图3D导航.户外平面广告都有3D内容.工作之余连一把3D游戏.电视广告中的3D形象不断出现电影中的3D虚拟内容不断刺激我们对画面的满足感,火爆的VR/AR中虚拟内容也都是3D ...

最新文章

  1. 看论文不用来回翻了,这款PDF阅读神器能自动提取前文信息,科研效率max!
  2. 中兴通讯ZXR10 T40G交换机telnet配置
  3. python创建txt文件-python创建txt文件
  4. Oracle数据库实用脚本
  5. pythonsqlite视图_SQLite VIEW/视图
  6. 奇偶链表的分割(C++)
  7. java ldap 实例_JAVA_基本LDAP操作实例
  8. 基于高斯分布的异常检测算法 项目描述
  9. 为什么你拼命学,却一无所成?
  10. 根据key找到JSON字符串中指定的value值(Java实现)
  11. firebug2.0.7 下载
  12. 怎么样计算机械功率,电功率与机械功率的换算公式
  13. 公众号滑动图代码_微信公众号文章滑动图片怎么做的呢?
  14. 群面时被问到“让你淘汰一个组员”一般如何淘汰谁?
  15. 什么是数据库?数据库有什么作用?
  16. linux利用vsftpd 搭建FTP服务器
  17. Blender新手入门试水作品:Low poly版敲击兽
  18. React中文文档之Rendering Elements
  19. Java Comparator使用指南 ---- 看这一篇就够了
  20. 抗疫行动题材网页设计 大学生最美逆行者感动人物网页代码 众志成城万众一心抗击疫情HTML网页设计

热门文章

  1. ASF网站自带python脚本完成sentinel-1数据自动下载
  2. 【PTA 7-11】骑士的金币
  3. 袋鼠过河问题(Java)
  4. java email qq邮箱 与 阿里企业邮箱/个人邮箱
  5. msc.marc的Python开发,MscMarc,python,2
  6. 简单解释一下一个项目中的pojo模块
  7. 苹果Home键恢复(无工具篇)
  8. ubuntu解决浏览器不支持HTML5播放器的方法
  9. 如何在Python中调用C++程序?(文中以Opencv为例,在Python中调用C++的Opencv)
  10. 关于js数组方法的题目整理 6.24更新至题目5