您的位置:首页 > 其它

Proxool连接池使用方法

2007-02-25 15:13 330 查看
首先从 http://proxool.sourceforge.net/ 下载proxool-0.9.0RC2.zip
解压后,把commons-logging.jar和proxool-0.9.0RC2.jar放到工程的lib文件夹里面。

连接方法一: 和JDBC连接方法类似。

JDBC连接方法:


Class.forName("com.mysql.jdbc.Driver");//数据库的驱动


Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/student","root","root");//连接的url



proxool连接方法:


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


Connection con = DriverManager.getConnection("proxool.aaa:com.mysql.jdbc.Driver:jdbc:mysql://127.0.0.1:3306/student","root","root");



需要注意的是,Class.forName加载的是proxool的驱动。

getConnection里url的内容是("proxool.别名:数据库的驱动:连接的url")

这里的别名可以随便填写,但一定要写……

连接方法二: XML

首先在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>mysql</alias>


<driver-url>jdbc:mysql://127.0.0.1:3306/student</driver-url>


<driver-class>com.mysql.jdbc.Driver</driver-class>


<driver-properties>


<property name="user" value="root"/>


<property name="password" value="root"/>


</driver-properties>


<maximum-connection-count>10</maximum-connection-count>


<house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>


</proxool>


</something-else-entirely>



proxool.xml这个文件是用来设置别名的。其中<proxool>标签就是别名的设置段。

alias是别名;

driver-url是驱动的url,就是连接的url;

driver-class是驱动的类,就是数据库驱动;

driver-properties是驱动的属性,可以设置登陆数据库的用户名和密码。

maximum-connection-count是最大连接数。

在工程的web.xml里添加

<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>

这段标记是要求tomcat在启动的时候加载proxool驱动并且指明 proxool.xml的位置。

不写的话,上面设置的别名就没用了。

做完上面的工作后,建立连接只需要

Connection con = DriverManager.getConnection("proxool.mysql");

这一句就可以了,Class.forName也不需要了。

注:别名是可以设置多个的,我们在连接多种数据库的时候就可以设置多个别名方便访问了!!

查看proxool的状态

在工程的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>

就可以通过/admin来访问proxool的状态了。

import java.sql.*;
import org.apache.log4j.*;

public class InitAction
{
private Connection conn;
Logger log = Logger.getLogger("InitAction");

public Connection getConnection()
{
try
{
conn = DriverManager.getConnection("proxool.xml-db");
}
catch(Exception ex)
{
log.error("数据库连接异常:"+ex.toString());
}
if(conn==null)
{
log.error("连接无效...");
}
return conn;
}

}

而每次在使用时只需要:

Connection conn = new InitAction().getConnection();

即可,真是太方便了!

注:使用完之后需要一定得conn.close(),不然连接很快会被用光..

----------------------

if (conn != null) {
System.out.println("数据连接测试成功!");
}
Stmt = conn.createStatement();
//Rst = Stmt.executeQuery("select * from t_function t");
Rst = Stmt.executeQuery("select * from nodetype t");
//Rst = Stmt.executeQuery("select * from insurecorp t");

while (Rst.next()) {
System.out.println(Rst.getString(1));
}
} catch (SQLException e) {
System.out.println("error" + e);
} catch (ProxoolException e1) {
System.out.println(e1);
} finally {
try {
if (conn != null) {
conn.close();
Stmt.close();
Rst.close();
}
} catch (SQLException e2) {
System.out.println(e2);
}
}
}

public static void main(String[] args) {
test databean = new test();
databean.TestReadPro();
//databean.TestReadXML();
}
}

XML配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<something-else-entirely>
<proxool>
<alias>Fee</alias>
<driver-url>jdbc:oracle:thin:@90.0.12.112:1521:ORCL</driver-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<driver-properties>
<property name="user" value="feemanager"/>
<property name="password" value="1"/>
</driver-properties>
<maximum-connection-count>500</maximum-connection-count>
<house-keeping-test-sql>select sysdate from DUAL</house-keeping-test-sql>
</proxool>
</something-else-entirely>

properties文件配置:

//网上查车数据库
jdbc-1.proxool.alias=WEBGIS
jdbc-1.proxool.driver-class=oracle.jdbc.driver.OracleDriver
jdbc-1.proxool.driver-url=jdbc:oracle:thin:@192.168.0.1:1521:ORCL
jdbc-1.user=gis
jdbc-1.password=1
jdbc-1.proxool.maximum-connection-count=20
jdbc-1.proxool.prototype-count=4
jdbc-1.proxool.house-keeping-test-sql=select sysdate from DUAL
jdbc-1.proxool.verbose=true
jdbc-1.proxool.statistics=10s,1m,1d
jdbc-1.proxool.statistics-log-level=ERROR
//标准版数据库
jdbc-2.proxool.alias=Navtech
jdbc-2.proxool.driver-class=oracle.jdbc.driver.OracleDriver
jdbc-2.proxool.driver-url=jdbc:oracle:thin:@192.168.0.2:1521:orcl
jdbc-2.user=Nav
jdbc-2.password=1
jdbc-2.proxool.maximum-connection-count=20
jdbc-2.proxool.prototype-count=4
jdbc-2.proxool.house-keeping-test-sql=select sysdate from DUAL
jdbc-2.proxool.verbose=true
jdbc-2.proxool.statistics=10s,1m,1d
jdbc-2.proxool.statistics-log-level=ERROR
//计费数据库
jdbc-3.proxool.alias=Fee
jdbc-3.proxool.driver-class=oracle.jdbc.driver.OracleDriver
jdbc-3.proxool.driver-url=jdbc:oracle:thin:@192.168.0.3:1521:ORCL
jdbc-3.user=fee
jdbc-3.password=1
jdbc-3.proxool.maximum-connection-count=20
jdbc-3.proxool.prototype-count=4
jdbc-3.proxool.house-keeping-test-sql=select sysdate from DUAL
jdbc-3.proxool.verbose=true
jdbc-3.proxool.statistics=10s,1m,1d
jdbc-3.proxool.statistics-log-level=ERROR

特别注意:

1、在用main类测试时可以直接将XML或properties文件放置于工程目录下。

2、如果将以上文件放于classes目录下时必须给出绝对路径,当然也可以使用变通做法,我是这样做的:

try {
InputStream is = getClass().getResourceAsStream("/Proxool.properties");
Properties properties = new Properties();
properties.load(is);
PropertyConfigurator.configure(properties);
} catch (IOException ex) {
ex.printStackTrace();
} catch (ProxoolException e1) {
e1.printStackTrace();
}

------------

5、在调用数据库连接代码:
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
Connection conn = DriverManager.getConnection("proxool.Develop");

6、利用proxool监控工具查看数据库运行状态。地址:./admin

以上配置是采用的XML文件方式,也可以采用properties配置方式:

proxool.alias=Test
proxool.driver-class=oracle.jdbc.driver.OracleDriver
proxool.driver-url=jdbc:oracle:thin:@192.168.10.160:1521:orcl
proxool.user=test
proxool.password=testpass
proxool.maximum-connection-count=20
proxool.prototype-count=4
proxool.house-keeping-test-sql=select sysdate from DUAL
proxool.verbose=true
proxool.statistics=10s,1m,1d
proxool.statistics-log-level=ERROR

<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/config/Proxool.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

在调用数据库连接代码
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
Connection conn = DriverManager.getConnection("proxool.Test");

还有一些配置属性:
maximum-connection-lifetime 最大连接生命周期 默认值:4小时
maximum-active-time: 最大活动时间 默认值:5分钟
maximum-connection-count 最大连接数 默认值:15个
minimum-connection-count 最小连接数 默认值:5个

在用admin调用的时候,可以查看这个WEB应用所有的连接数的状态,虽然这个插件可以把不活动的连接自动放到连接池里,但是如果连接数过多,而不及时KILL的话,对网站的连接是有很大的影响的,建议还是手工KILL。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: