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,如需转载请自行联系原作者
相关文章
|
22天前
|
人工智能 安全 Java
Java和Python在企业中的应用情况
Java和Python在企业中的应用情况
46 7
|
1月前
|
JSON Java Apache
非常实用的Http应用框架,杜绝Java Http 接口对接繁琐编程
UniHttp 是一个声明式的 HTTP 接口对接框架,帮助开发者快速对接第三方 HTTP 接口。通过 @HttpApi 注解定义接口,使用 @GetHttpInterface 和 @PostHttpInterface 等注解配置请求方法和参数。支持自定义代理逻辑、全局请求参数、错误处理和连接池配置,提高代码的内聚性和可读性。
120 3
|
17天前
|
缓存 Java 开发者
Java多线程并发编程:同步机制与实践应用
本文深入探讨Java多线程中的同步机制,分析了多线程并发带来的数据不一致等问题,详细介绍了`synchronized`关键字、`ReentrantLock`显式锁及`ReentrantReadWriteLock`读写锁的应用,结合代码示例展示了如何有效解决竞态条件,提升程序性能与稳定性。
54 6
|
15天前
|
监控 Java 数据库连接
Java线程管理:守护线程与用户线程的区分与应用
在Java多线程编程中,线程可以分为守护线程(Daemon Thread)和用户线程(User Thread)。这两种线程在行为和用途上有着明显的区别,了解它们的差异对于编写高效、稳定的并发程序至关重要。
25 2
|
1月前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
基于开源框架Spring AI Alibaba快速构建Java应用
|
25天前
|
安全 Java 开发者
Java 多线程并发控制:深入理解与实战应用
《Java多线程并发控制:深入理解与实战应用》一书详细解析了Java多线程编程的核心概念、并发控制技术及其实战技巧,适合Java开发者深入学习和实践参考。
48 6
|
22天前
|
关系型数据库 MySQL Java
MySQL索引优化与Java应用实践
【11月更文挑战第25天】在大数据量和高并发的业务场景下,MySQL数据库的索引优化是提升查询性能的关键。本文将深入探讨MySQL索引的多种类型、优化策略及其在Java应用中的实践,通过历史背景、业务场景、底层原理的介绍,并结合Java示例代码,帮助Java架构师更好地理解并应用这些技术。
23 2
|
24天前
|
存储 安全 Java
Java多线程编程中的并发容器:深入解析与实战应用####
在本文中,我们将探讨Java多线程编程中的一个核心话题——并发容器。不同于传统单一线程环境下的数据结构,并发容器专为多线程场景设计,确保数据访问的线程安全性和高效性。我们将从基础概念出发,逐步深入到`java.util.concurrent`包下的核心并发容器实现,如`ConcurrentHashMap`、`CopyOnWriteArrayList`以及`BlockingQueue`等,通过实例代码演示其使用方法,并分析它们背后的设计原理与适用场景。无论你是Java并发编程的初学者还是希望深化理解的开发者,本文都将为你提供有价值的见解与实践指导。 --- ####
|
25天前
|
Java 测试技术 API
Java 反射机制:深入解析与应用实践
《Java反射机制:深入解析与应用实践》全面解析Java反射API,探讨其内部运作原理、应用场景及最佳实践,帮助开发者掌握利用反射增强程序灵活性与可扩展性的技巧。
65 4
|
27天前
|
Java BI API
Java Excel报表生成:JXLS库的高效应用
在Java应用开发中,经常需要将数据导出到Excel文件中,以便于数据的分析和共享。JXLS库是一个强大的工具,它基于Apache POI,提供了一种简单而高效的方式来生成Excel报表。本文将详细介绍JXLS库的使用方法和技巧,帮助你快速掌握Java中的Excel导出功能。
60 6