在阅读了Proxool的官方指南后,我写了个简单测试,扔出来,希望能对大家有用。
环境:
JDK 1.5
proxool-0.9.1.zip
Oracle 10g
http://ncu.dl.sourceforge.net/project/proxool/proxool/0.9.1/proxool-0.9.1.zip
Proxool准确说还算不上一个连接池,因为里面没有一个获取DataSource对象的方法,也没有一个获取“**Pool”的途径。因此要使用Proxool连接池,有两条路可走,一是自己实现一个连接池的管理工具,二是通过开源的框架来使用,因为好多开源框架实现了池管理功能,比如Spring、Hibernate、iBatis等等。
Proxool的性能据说还不错,常常与Spring、Hibernate等整合使用,倒很方便。如果你是做一个Java应用,那么Proxool不是盏省油的灯,你要自己实现连接池管理,如果水平一般,代码漏洞会很多。
这里我不打算实现什么连接池管理工具,也不使用开源框架,而是仅仅利用Proxool提供的功能来做一个数据库操作。
1、写Proxool的配置
Proxool提供了一个接口,用来读取xml格式或properties格式的配置信息,用来初始化Proxool所需的参数。这里我用xml配置,当然这个XML是网上找的,我懒得写,仅仅改吧改吧能用。
<?xml version="1.0" encoding="UTF-8"?> <something-else-entirely> <proxool> <alias>timalias</alias> <!--数据源的别名--> <driver-url>jdbc:oracle:thin:@192.168.104.192:1521:tim</driver-url> <!--url连接串--> <driver-class>oracle.jdbc.driver.OracleDriver</driver-class> <!--驱动类--> <driver-properties> <property name="user" value="tim"/> <!--用户名--> <property name="password" value="tim_8968888"/> <!--密码--> </driver-properties> <!--最大连接数(默认5个),超过了这个连接数,再有请求时,就排在队列中等候,最大的等待请求数由maximum-new-connections决定 --> <maximum-connection-count>100</maximum-connection-count> <!--最小连接数(默认2个)--> <minimum-connection-count>10</minimum-connection-count> <!--proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁 默认30秒--> <house-keeping-sleep-time>90000</house-keeping-sleep-time> <!--没有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受--> <maximum-new-connections>10</maximum-new-connections> <!--最少保持的空闲连接数(默认2个)--> <prototype-count>5</prototype-count> <!--在使用之前测试--> <test-before-use>true</test-before-use> <!--用于保持连接的测试语句 --> <house-keeping-test-sql>select sysdate from dual</house-keeping-test-sql> </proxool> </something-else-entirely> |
import org.logicalcobwebs.proxool.configuration.JAXPConfigurator;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
/**
* Created by IntelliJ IDEA.
*
* @author leizhimin 2009-10-10 17:59:47
*/
public class TestProxool {
public static String dburl = "jdbc:oracle:thin:@192.168.104.192:1521:tim";
public static String user = "tim";
public static String password = "tim_8968888";
/**
* JDBC方式测试
*
* @throws Exception
*/
public static void test1() throws Exception {
String testsql = "select * from village t where lastid = 346";
//1:注册驱动类
Class.forName("oracle.jdbc.driver.OracleDriver");
//2:创建数据库连接
Connection conn = DriverManager.getConnection(dburl, user, password);
//3:创建执行SQL的对象
Statement stmt = conn.createStatement();
//4:执行SQL,并获取返回结果
ResultSet rs = stmt.executeQuery(testsql);
//5:处理返回结果,此处打印查询结果
while (rs.next()) {
System.out.print(rs.getLong("id") + "/t");
System.out.print(rs.getString("name") + "/t");
System.out.println();
}
//6:关闭数据库连接
conn.close();
}
/**
* proxool方式测试
*
* @throws Exception
*/
public static void test2() throws Exception {
//Java应用中先要加载配置文件,否则谁知道你配置给谁用的
JAXPConfigurator.configure("F://_test//synorg//src//proxool.xml", false);
String testsql = "select * from village t where lastid = 346";
//1:注册驱动类,这次这个驱动已经不是Oracle的驱动了,是Proxool专用的驱动
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
//2:创建数据库连接,这个参数是一个字符串,是数据源的别名,在配置文件中配置的timalias,参数格式为:proxool.数据源的别名
Connection conn = DriverManager.getConnection("proxool.timalias");
//3:创建执行SQL的对象
Statement stmt = conn.createStatement();
//4:执行SQL,并获取返回结果
ResultSet rs = stmt.executeQuery(testsql);
//5:处理返回结果,此处打印查询结果
while (rs.next()) {
System.out.print(rs.getLong("id") + "/t");
System.out.print(rs.getString("name") + "/t");
System.out.println();
}
//6:关闭数据库连接
conn.close();
}
public static void main(String[] args) throws Exception {
test2();
}
}