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,如需转载请自行联系原作者
相关文章
|
15天前
|
移动开发 Java Android开发
构建高效Android应用:探究Kotlin与Java的性能差异
【4月更文挑战第3天】在移动开发领域,性能优化一直是开发者关注的焦点。随着Kotlin的兴起,其在Android开发中的地位逐渐上升,但关于其与Java在性能方面的对比,尚无明确共识。本文通过深入分析并结合实际测试数据,探讨了Kotlin与Java在Android平台上的性能表现,揭示了在不同场景下两者的差异及其对应用性能的潜在影响,为开发者在选择编程语言时提供参考依据。
|
16天前
|
缓存 算法 Java
Java内存管理与调优:释放应用潜能的关键
【4月更文挑战第2天】Java内存管理关乎性能与稳定性。理解JVM内存结构,如堆和栈,是优化基础。内存泄漏是常见问题,需谨慎管理对象生命周期,并使用工具如VisualVM检测。有效字符串处理、选择合适数据结构和算法能提升效率。垃圾回收自动回收内存,但策略调整影响性能,如选择不同类型的垃圾回收器。其他优化包括调整堆大小、使用对象池和缓存。掌握这些技巧,开发者能优化应用,提升系统性能。
|
28天前
|
Java 编译器 Android开发
构建高效Android应用:探究Kotlin与Java的性能差异
【2月更文挑战第30天】 随着Kotlin成为开发Android应用的首选语言,开发者社区对于其性能表现持续关注。本文通过深入分析与基准测试,探讨Kotlin与Java在Android平台上的性能差异,揭示两种语言在编译效率、运行时性能和内存消耗方面的具体表现,并提供优化建议。我们的目标是为Android开发者提供科学依据,帮助他们在项目实践中做出明智的编程语言选择。
|
15天前
|
Java
深入理解Java并发编程:线程池的应用与优化
【4月更文挑战第3天】 在Java并发编程中,线程池是一种重要的资源管理工具,它能有效地控制和管理线程的数量,提高系统性能。本文将深入探讨Java线程池的工作原理、应用场景以及优化策略,帮助读者更好地理解和应用线程池。
|
22天前
|
Java 编译器 Android开发
构建高效Android应用:探究Kotlin与Java的性能差异
在开发高性能的Android应用时,选择合适的编程语言至关重要。近年来,Kotlin因其简洁性和功能性受到开发者的青睐,但其性能是否与传统的Java相比有所不足?本文通过对比分析Kotlin与Java在Android平台上的运行效率,揭示二者在编译速度、运行时性能及资源消耗方面的具体差异,并探讨在实际项目中如何做出最佳选择。
17 4
|
24天前
|
数据采集 分布式计算 大数据
Java语言在大数据处理中的应用
传统的大数据处理往往依赖于庞大的数据中心和高性能的服务器,然而随着大数据时代的到来,Java作为一种强大的编程语言正在被广泛应用于大数据处理领域。本文将探讨Java语言在大数据处理中的优势和应用,以及其在分布式计算、数据处理和系统集成等方面的重要作用。
|
6天前
|
Java
探秘jstack:解决Java应用线程问题的利器
探秘jstack:解决Java应用线程问题的利器
14 1
探秘jstack:解决Java应用线程问题的利器
|
10天前
|
XML JSON JavaScript
Java中XML和JSON的比较与应用指南
本文对比了Java中XML和JSON的使用,XML以自我描述性和可扩展性著称,适合结构复杂、需验证的场景,但语法冗长。JSON结构简洁,适用于轻量级数据交换,但不支持命名空间。在Java中,处理XML可使用DOM、SAX解析器或XPath,而JSON可借助GSON、Jackson库。根据需求选择合适格式,注意安全、性能和可读性。
23 0
|
16天前
|
XML JSON JavaScript
使用JSON和XML:数据交换格式在Java Web开发中的应用
【4月更文挑战第3天】本文比较了JSON和XML在Java Web开发中的应用。JSON是一种轻量级、易读的数据交换格式,适合快速解析和节省空间,常用于API和Web服务。XML则提供更强的灵活性和数据描述能力,适合复杂数据结构。Java有Jackson和Gson等库处理JSON,JAXB和DOM/SAX处理XML。选择格式需根据应用场景和需求。
|
16天前
|
安全 Java 容器
Java并发编程:实现高效、线程安全的多线程应用
综上所述,Java并发编程需要注意线程安全、可见性、性能等方面的问题。合理使用线程池、同步机制、并发容器等工具,可以实现高效且线程安全的多线程应用。
14 1