`
Baple
  • 浏览: 12160 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
文章分类
社区版块
存档分类
最新评论

Java应用中使用Proxool

阅读更多
本文题目没有强调的是Java应用,不是Java Web应用,原因是从网上找有关Proxool的例子,全是一个摸样,都是将讲解Java Web中的应用,真没劲,难道Proxool离开了web就不能用了?不信你可以google一把看看。

在阅读了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等整合使用,倒很方便。

这里我不打算实现什么连接池管理工具,也不使用开源框架,而是仅仅利用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>

2、写测试类
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();
        }
}

运行结果:
2009-10-14 18:13:05    - INFO    org.logicalcobwebs.proxool.ProxoolFacade         - Proxool 0.9.1 (23-Aug-2008 11:10)
2009-10-14 18:13:05    - WARN    org.logicalcobwebs.proxool.timalias         - Use of proxool.maximum-new-connections is deprecated. Use more descriptive proxool.simultaneous-build-throttle instead.
5411  张一村   
5412  张二村   
5413  张三村   
5414  张四村   
5415  南原村   
5416  辛庄村   
5417  凡村   
5418  西阳村   
5419  人马村   
5420  前关村   
5421  后关村   
5422  赵村   
5423  水淆村   
5424  沟东村   
5425  陈村   
5426  窑店村   
5427  坡头村   
20588  大安头   
20589  涧里村   
20590  人马寨   
20591  白草村   
20592  窑院村   
20593  寺下村   
20594  反上村   
33651  小安头   
33652  五花岭   
33653  东沟   
33654  西沟   
33655  南沟   
33656  王村   
33657  营前   
33659  东阳   
33661  太阳   
33663  丰阳   
33665  宜村   
33667  窑头   
32225  石原村   
32226  庙上村   
32227  庙洼   
38739  丁管营   
38841  涧西   
2009-10-14 18:13:06    - INFO    org.logicalcobwebs.proxool.timalias         - Shutting down 'timalias' pool immediately [Shutdown Hook]
2009-10-14 18:13:07    - INFO    org.logicalcobwebs.proxool.PrototyperController         - Stopping Prototyper thread
2009-10-14 18:13:07    - INFO    org.logicalcobwebs.proxool.HouseKeeperController         - Stopping HouseKeeper thread

Process finished with exit code 0

因为使用了log4j,这个结果里面输出了一些日志信息。

3、说明

Proxool的配置文件路径不能使用ClassPath,我查看过接口代码,可以传入一个XmlReader、或流来解决,这里写成绝对路径就凑合着能跑起来就行。

也支持Properties的配置,则个可以参考官方文档,也很方便的。

有关配置参数,网上的文档一堆一堆的重复,大家随便找篇就行。
http://wallimn.javaeye.com/blog/486550

想看Web应用的,参看:
http://blog.csdn.net/goodhumor/archive/2008/03/04/2144911.aspx

本文出自 “熔 岩” 博客,请务必保留此出处http://lavasoft.blog.51cto.com/62575/212387
分享到:
评论

相关推荐

    数据库联接池proxool

    基于proxool插件有3种方式实现联接池。 1) JSP 运行程序中Test.jsp即可建立连接池 2) 应用程序实现。 3) Xml实现。 很简单。(推荐) &lt;br&gt;内有proxool及相关说明

    基于JAVA+SpringBoot智能交通站务管理系统+项目说明.zip

    (3)、服务端接口安全可靠,请求传输加密,运行安全可靠,易扩展B/S应用、手机APP、微信小程序、公众号接入; (4)、系统支持多数据源运行,数据库可共用也可以相互独立存储,数据库按业务子系统分为: 4.1、站务系统...

    JAVA项目开发全程实录(含电子书和所有源代码)

    6.12 使用短信猫和Java Mail组件 288 6.12.1 使用短信猫 288 6.12.2 使用Java Mail组件 290 6.13 本章总结 295 第7章 欣想电子商城(Spring+Hibernate +SQL Server实现) 296 教学视频:1小时53分 7.1 开发背景 297 ...

    R2高性能数据库连接池v1.6源码

    v1.6增加了一个配置项(类似于proxool的最大连接使用时间),当一个连接的使用时间超过这个配置后将被自动回收,改连接内的内容将被自动回滚。 v1.5将整个工具包优化减少了一个Wrap包装类,减少少量内存消耗。 v...

    IOIF基于开源技术的JAVA开发框架

    该框架在实现的过程中提出一个新的概念IOP“面向项目的开发”。在这个思想的指导下,结合当前流行的框架与技术,开发实现了一个面向项目的集成框架,命名为IOIF。IOIF避免了对某个项目的依赖,使之成为一个主流B/S与...

    R2高性能数据库连接池v1.8改进版源码

    R2 jdbc连接池,用于java程序中jdbc连接池的配置管理,可应用于非web项目(纯java项目),全参数化配置。 应用时,先用rar打开jar包,拷贝r2.properties文件到class目录,并修改参数。 本包需要用到log4j,请在调用...

    R2高性能数据库连接池v1.8源码

    R2 jdbc连接池,用于java程序中jdbc连接池的配置管理,可应用于非web项目(纯java项目),全参数化配置。 应用时,先用rar打开jar包,拷贝r2.properties文件到class目录,并修改参数。 本包需要用到log4j,请在调用...

    R2高性能数据库连接池v1.7源码

    R2 jdbc连接池,用于java程序中jdbc连接池的配置管理,可应用于非web项目(纯java项目),全参数化配置。 应用时,先用rar打开jar包,拷贝r2.properties文件到class目录,并修改参数。 本包需要用到log4j,请在调用...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    而使用表现层框架则可以将Jsp中剩余的JavaBeans完全分离,这部分JavaBeans主要负责显示相关信息,一般是通过标签库(Taglib)实现,不同框架有不同自己的标签库,Struts是应用比较广泛的一种表现层框架。 2、 Ajax...

    积分管理系统java源码-traffic:智能交通站务管理系统

    (3)、服务端接口安全可靠,请求传输加密,运行安全可靠,易扩展B/S应用、手机APP、微信小程序、公众号接入; (4)、系统支持多数据源运行,数据库可共用也可以相互独立存储,数据库按业务子系统分为: 4.1、站务系统...

Global site tag (gtag.js) - Google Analytics