Java应用中使用Proxool

简介:
本文题目没有强调的是Java应用,不是Java Web应用,原因是从网上找有关Proxool的例子,全是一个摸样,都是将讲解Java Web中的应用,真没劲,难道Proxool离开了web就不能用了?不信你可以google一把看看。
 
在阅读了Proxool的官方指南后,我写了个简单测试,扔出来,希望能对大家有用。
 
环境:
JDK 1.5
proxool-0.9.1.zip
Oracle 10g
 
 
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的配置,则个可以参考官方文档,也很方便的。


本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/212387,如需转载请自行联系原作者
相关文章
|
10月前
|
人工智能 算法 Java
Java与AI驱动区块链:构建智能合约与去中心化AI应用
区块链技术和人工智能的融合正在开创去中心化智能应用的新纪元。本文深入探讨如何使用Java构建AI驱动的区块链应用,涵盖智能合约开发、去中心化AI模型训练与推理、数据隐私保护以及通证经济激励等核心主题。我们将完整展示从区块链基础集成、智能合约编写、AI模型上链到去中心化应用(DApp)开发的全流程,为构建下一代可信、透明的智能去中心化系统提供完整技术方案。
594 3
|
存储 数据采集 搜索推荐
Java 大视界 -- Java 大数据在智慧文旅旅游景区游客情感分析与服务改进中的应用实践(226)
本篇文章探讨了 Java 大数据在智慧文旅景区中的创新应用,重点分析了如何通过数据采集、情感分析与可视化等技术,挖掘游客情感需求,进而优化景区服务。文章结合实际案例,展示了 Java 在数据处理与智能推荐等方面的强大能力,为文旅行业的智慧化升级提供了可行路径。
Java 大视界 -- Java 大数据在智慧文旅旅游景区游客情感分析与服务改进中的应用实践(226)
|
机器学习/深度学习 数据采集 数据可视化
Java 大视界 -- 基于 Java 的大数据可视化在城市空气质量监测与污染溯源中的应用(216)
本文探讨Java大数据可视化在城市空气质量监测与污染溯源中的创新应用,结合多源数据采集、实时分析与GIS技术,助力环保决策,提升城市空气质量管理水平。
Java 大视界 -- 基于 Java 的大数据可视化在城市空气质量监测与污染溯源中的应用(216)
|
存储 监控 数据可视化
Java 大视界 -- 基于 Java 的大数据可视化在企业生产运营监控与决策支持中的应用(228)
本文探讨了基于 Java 的大数据可视化技术在企业生产运营监控与决策支持中的关键应用。面对数据爆炸、信息孤岛和实时性不足等挑战,Java 通过高效数据采集、清洗与可视化引擎,助力企业构建实时监控与智能决策系统,显著提升运营效率与竞争力。
|
Java 大数据 数据处理
Java 大视界 -- 基于 Java 的大数据实时数据处理在工业互联网设备协同制造中的应用与挑战(222)
本文探讨了基于 Java 的大数据实时数据处理在工业互联网设备协同制造中的应用与挑战。文章分析了传统制造模式的局限性,介绍了工业互联网带来的机遇,并结合实际案例展示了 Java 在多源数据采集、实时处理及设备协同优化中的关键技术应用。同时,也深入讨论了数据安全、技术架构等挑战及应对策略。
|
数据采集 搜索推荐 Java
Java 大视界 -- Java 大数据在智能教育虚拟学习环境构建与用户体验优化中的应用(221)
本文探讨 Java 大数据在智能教育虚拟学习环境中的应用,涵盖多源数据采集、个性化推荐、实时互动优化等核心技术,结合实际案例分析其在提升学习体验与教学质量中的成效,并展望未来发展方向与技术挑战。
|
10月前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
863 8
|
11月前
|
人工智能 Java API
Java与大模型集成实战:构建智能Java应用的新范式
随着大型语言模型(LLM)的API化,将其强大的自然语言处理能力集成到现有Java应用中已成为提升应用智能水平的关键路径。本文旨在为Java开发者提供一份实用的集成指南。我们将深入探讨如何使用Spring Boot 3框架,通过HTTP客户端与OpenAI GPT(或兼容API)进行高效、安全的交互。内容涵盖项目依赖配置、异步非阻塞的API调用、请求与响应的结构化处理、异常管理以及一些面向生产环境的最佳实践,并附带完整的代码示例,助您快速将AI能力融入Java生态。
1607 12
|
11月前
|
安全 Java API
Java SE 与 Java EE 区别解析及应用场景对比
在Java编程世界中,Java SE(Java Standard Edition)和Java EE(Java Enterprise Edition)是两个重要的平台版本,它们各自有着独特的定位和应用场景。理解它们之间的差异,对于开发者选择合适的技术栈进行项目开发至关重要。
1626 1
|
设计模式 XML 安全
Java枚举(Enum)与设计模式应用
Java枚举不仅是类型安全的常量,还具备面向对象能力,可添加属性与方法,实现接口。通过枚举能优雅实现单例、策略、状态等设计模式,具备线程安全、序列化安全等特性,是编写高效、安全代码的利器。