J2EE开发技术点6:Proxool数据库连接池
来源:互联网 发布:日历设计软件 编辑:程序博客网 时间:2024/06/07 03:46
前言
Proxool也是目前主流的数据库连接池,Proxool是一种Java数据库连接池技术。也是sourceforge下的一个开源项目,这个项目提供一个健壮、易用的连接池,最为关键的是这个连接池提供监控的功能,方便易用,便于发现连接泄漏的情况。下面是对Proxool连接池的一些技术小结
使用Proxool连接池方式
在官方提供的文档中,有多种使用Proxool的方式,这里只介绍两种:一种是通过配置文件的方式使用Proxool;一种是通过直接设置属性的方式使用。其中使用了Proxool连接池中的数据源。与jdbc pool一样也是通过数据源的方式进行配置
1、直接设置属性的方式
编写一个工具类,该类可以返回Proxool数据库连接对象
package cp;import java.io.InputStream;import java.io.InputStreamReader;import java.io.Reader;import java.io.UnsupportedEncodingException;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import org.logicalcobwebs.proxool.ProxoolDataSource;import org.logicalcobwebs.proxool.ProxoolException;import org.logicalcobwebs.proxool.configuration.JAXPConfigurator;public class Proxool { private ProxoolDataSource dataSource = null; public Proxool() { dataSource = new ProxoolDataSource(); init2(); } public void init2(){ dataSource = new ProxoolDataSource(); dataSource.setDriver("com.mysql.jdbc.Driver"); dataSource.setDriverUrl("jdbc:mysql://localhost/test"); dataSource.setUser("root"); dataSource.setPassword("1234"); dataSource.setAlias("mysql"); dataSource.setMaximumConnectionCount(5); dataSource.setMinimumConnectionCount(0); dataSource.setMaximumActiveTime(5); } public Connection getProxoolConnection2() { Connection connection = null; try { connection = dataSource.getConnection(); } catch (SQLException e) { e.printStackTrace(); } return connection; }}
然后编写测试代码:
public class TestCp { public static void main(String[] args) throws SQLException { Proxool p = new Proxool(); for (int i = 0; i < 5; i++) { Connection con = p.getProxoolConnection2(); System.out.println(con); } }}
测试结果如下:
可以发现,返回的是不同的五个连接对象。使用这种方式的好处简单直接,缺点是不易维护,属性发生变化需要修改代码。
2、使用配置文件
下面,我们看看如何以配置文件的方式使用Proxool连接池。首先,自然,需要创建一个proxool.xml配置文件,暂且先放到src根目录下。文件内容如下:
<?xml version="1.0" encoding="UTF-8"?><something-else-entirely> <proxool> <alias>mysql</alias> <!--数据源的别名 --> <driver-url>jdbc:mysql://127.0.0.1/test</driver-url> <!--url--> <driver-class>com.mysql.jdbc.Driver</driver-class> <!--驱动类 --> <driver-properties> <property name="user" value="root" /> <property name="password" value="1234" /> </driver-properties> <!-- 任一时刻,可以(同时)建立的最大连接数 --> <simultaneous-build-throttle>10</simultaneous-build-throttle> <!--最大连接数(默认5个)--> <maximum-connection-count>100</maximum-connection-count> <!--最小连接数(默认2个) --> <minimum-connection-count>10</minimum-connection-count> <!--proxool自动侦察各个连接状态的时间间隔(毫秒)--> <house-keeping-sleep-time>120000</house-keeping-sleep-time> <!--最少保持的空闲连接数 --> <prototype-count>10</prototype-count> <!--在使用之前测试 --> <test-before-use>true</test-before-use> <!--用于保持连接的测试语句 --> <house-keeping-test-sql>select 1</house-keeping-test-sql> </proxool></something-else-entirely>
上面的这些属性也可以通过第一种方式进行设置,之后,需要编写获取连接的方法,代码如下:
public class Proxool { public Proxool() { dataSource = new ProxoolDataSource(); init(); } public void init() { InputStream in = Proxool.class.getResourceAsStream("/proxool.xml"); Reader reader = null; try { reader = new InputStreamReader(in, "utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } try { JAXPConfigurator.configure(reader, false); } catch (ProxoolException e) { e.printStackTrace(); } } public Connection getProxoolConnection() { Connection connection = null; try { connection = DriverManager.getConnection("proxool.mysql"); } catch (SQLException e) { e.printStackTrace(); } return connection; }}
注意两者的区别,使用这种方式需要读取proxool.xml这个配置文件(以流的方式),读取之后,调用JAXPConfigurator的configure方法就可以完成对xml文件的解析了。之后在客户端直接调用getConnection方法就能从数据库连接池中获取连接了。测试代码如下:
public class TestCp { public static void main(String[] args) throws SQLException { Proxool p = new Proxool(); for (int i = 0; i < 5; i++) { Connection con = p.getProxoolConnection(); System.out.println(con); } }}
测试如下:
Proxool数据库连接池小结
使用Proxool数据库连接池可以很好管理数据库连接,提高服务器的响应性能。总结jdbc pool数据库连接池与Proxool数据库连接池,可以发现两者存在一定的共性:都是通过数据源的方式获取连接,这点与普通jdbc操作有很大不同,Drivermanager类使用后不能及时释放资源,而且是不可重用的。而数据库连接池则管理了数据库连接池任何一个连接对象,包括其创建、释放和销毁。
Proxool上述的两种方式都比较普遍,但是使用配置文件灵活性比较大,便于对代码进行维护,推荐这种使用方式。
- J2EE开发技术点6:Proxool数据库连接池
- J2EE开发常用数据库连接池
- J2EE开发技术点4:ajax技术
- proxool 配置数据库连接池
- proxool数据库连接池配制
- 数据库连接池总结----Proxool
- 浅析数据库连接池proxool
- PROXOOL数据库连接池使用
- 数据库连接池总结----Proxool
- proxool 配置数据库连接池
- 数据库连接池概述:Proxool
- proxool数据库连接池框架
- proxool数据库连接池配置
- Java数据库连接池 Proxool
- proxool数据库连接池使用方法
- Proxool数据库连接池
- J2EE开发技术点3:文件上传下载
- proxool数据库连接池使用实例
- Android studio asserts文件夹应该放哪儿?
- 数据库索引的实现原理
- 解决jenkins输出log中文乱码问题
- XCTest
- 为嵌套在左右滑动的UIScrollview上的UITableView增加滑动删除
- J2EE开发技术点6:Proxool数据库连接池
- maven
- eclipse中将一个项目作为library导入另一个项目中
- 利用BIOS INT 0x13读取软盘
- C++别名传参和指针传参区别
- 爬虫之自动保存文档-使用python/selenium
- 远程连接mysql被拒绝问题
- 23设计模式之代理模式(Proxy)
- 编写留言簿的一个问题, 研究了三天了也没看出来哪里不对, 请各位大神给支个招