配置Spring的Proxool数据源

转载 2012年03月29日 15:56:02
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://lavasoft.blog.51cto.com/62575/212616
配置Spring的Proxool数据源
 
Proxool单独应用比较麻烦,毕竟自己实现的数据库连接池管理工具难免有不足之处,因此可以考虑与Spring结合,形成一个DataSource对象来操作数据库,这样比较简单灵活,可靠性也高。
 
下面是在上文例子的基础上所改写的,环境如下:
Spring 2.0
proxool-0.9.1
JDK1.5
 
1、写Spring的配置文件
 
syndsconfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans
                xmlns="http://www.springframework.org/schema/beans"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xsi:schemaLocation="http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

        <beanid="dataSource"
                    class="org.logicalcobwebs.proxool.ProxoolDataSource">
                <propertyname="driver">
                        <value>oracle.jdbc.driver.OracleDriver</value>
                </property>
                <propertyname="driverUrl">
                        <value>jdbc:oracle:thin:@192.168.104.192:1521:tim</value>
                </property>
                <propertyname="user"value="tim"/>
                <propertyname="password"value="tim_8968888"/>
                <propertyname="alias"value="Pool_dbname"/>
                <propertyname="maximumActiveTime"value="300000"/>
                <propertyname="prototypeCount"value="0"/>
                <propertyname="maximumConnectionCount"value="50"/>
                <propertyname="minimumConnectionCount"value="2"/>
                <propertyname="simultaneousBuildThrottle"value="50"/>
                <propertyname="houseKeepingTestSql"value="select CURRENT_DATE"/>
        </bean>
</beans>
 
2、写Spring的上下文环境管理工具
 
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
* Created by IntelliJ IDEA.
*
* @author leizhimin 2009-10-15 10:21:38
*/

public class ApplicationContextUtil {
        private static ApplicationContext applicationContext;

        static {
                if (applicationContext == null)
                        applicationContext = rebuildApplicationContext();
        }

        /**
         * 重新构建Spring应用上下文环境
         *
         * @return ApplicationContext
         */

        public static ApplicationContext rebuildApplicationContext() {
                return new ClassPathXmlApplicationContext("/syndsconfig.xml");
        }

        /**
         * 获取Spring应用上下文环境
         *
         * @return
         */

        public static ApplicationContext getApplicationContext() {
                return applicationContext;
        }

        /**
         * 简单的上下文环境测试
         */

        public staticvoid main(String[] args) {
                rebuildApplicationContext();
                if (applicationContext == null) {
                        System.out.println("ApplicationContext isnull");
                } else {
                        System.out.println("ApplicationContext is notnull!");
                }
        }
}
 
3、写测试类
import javax.sql.DataSource;
import java.sql.Connection;
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 staticvoid 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);
                DataSource ds = (DataSource) ApplicationContextUtil.getApplicationContext().getBean("dataSource");
                Connection conn = ds.getConnection();
                //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 staticvoid main(String[] args)throws Exception {
                test1();
        }
}
 
控制台输出如下:
2009-10-15 12:37:03    - INFO    org.springframework.core.CollectionFactory         - JDK 1.4+ collections available
2009-10-15 12:37:03    - INFO    org.springframework.beans.factory.xml.XmlBeanDefinitionReader         - Loading XML bean definitions fromclass path resource [syndsconfig.xml]
2009-10-15 12:37:04    - INFO    org.springframework.context.support.ClassPathXmlApplicationContext         - Bean factoryfor application context [org.springframework.context.support.ClassPathXmlApplicationContext;hashCode=9737354]: org.springframework.beans.factory.support.DefaultListableBeanFactory defining beans [dataSource]; root of BeanFactory hierarchy
2009-10-15 12:37:04    - INFO    org.springframework.context.support.ClassPathXmlApplicationContext         - 1 beans defined in application context [org.springframework.context.support.ClassPathXmlApplicationContext;hashCode=9737354]
2009-10-15 12:37:04    - INFO    org.springframework.context.support.ClassPathXmlApplicationContext         - Unable to locate MessageSource with name 'messageSource': usingdefault [org.springframework.context.support.DelegatingMessageSource@10655dd]
2009-10-15 12:37:04    - INFO    org.springframework.context.support.ClassPathXmlApplicationContext         - Unable to locate ApplicationEventMulticaster with name 'applicationEventMulticaster': usingdefault [org.springframework.context.event.SimpleApplicationEventMulticaster@c8f6f8]
2009-10-15 12:37:04    - INFO    org.springframework.beans.factory.support.DefaultListableBeanFactory         - Pre-instantiating singletons in factory [org.springframework.beans.factory.support.DefaultListableBeanFactory defining beans [dataSource]; root of BeanFactory hierarchy]
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-15 12:37:05    - INFO    org.logicalcobwebs.proxool.Pool_dbname         - Shutting down 'Pool_dbname' pool immediately [Shutdown Hook]
2009-10-15 12:37:05    - INFO    org.logicalcobwebs.proxool.PrototyperController         - Stopping Prototyper thread
2009-10-15 12:37:05    - INFO    org.logicalcobwebs.proxool.HouseKeeperController         - Stopping HouseKeeper thread

Process finished with exit code 0
 
info日志是log4j输出的。
 
当然,可以在Spring中配置多个DataSource,都没问题的。
 
----------------------
另外今天有个同事说Proxool不能配置多个连接池,我经过测试,Proxool可以配置多个连接池,可以放心使用。
配置文件如下小:
<?xml version="1.0" encoding="UTF-8"?>
<beans
                xmlns="http://www.springframework.org/schema/beans"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xsi:schemaLocation="http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

        <beanid="dataSource"
                    class="org.logicalcobwebs.proxool.ProxoolDataSource">
                <propertyname="driver">
                        <value>oracle.jdbc.driver.OracleDriver</value>
                </property>
                <propertyname="driverUrl">
                        <value>jdbc:oracle:thin:@192.168.104.192:1521:tim</value>
                </property>
                <propertyname="user"value="tim"/>
                <propertyname="password"value="tim_8968888"/>
                <propertyname="alias"value="proxool.a2"/>
                <propertyname="maximumActiveTime"value="300000"/>
                <propertyname="prototypeCount"value="0"/>
                <propertyname="maximumConnectionCount"value="50"/>
                <propertyname="minimumConnectionCount"value="2"/>
                <propertyname="simultaneousBuildThrottle"value="50"/>
                <propertyname="houseKeepingTestSql"value="select CURRENT_DATE"/>
        </bean>
        <beanid="dataSource2"
                    class="org.logicalcobwebs.proxool.ProxoolDataSource">
                <propertyname="driver">
                        <value>oracle.jdbc.driver.OracleDriver</value>
                </property>
                <propertyname="driverUrl">
                        <value>jdbc:oracle:thin:@192.168.104.164:1521:orcl</value>
                </property>
                <propertyname="user"value="rural"/>
                <propertyname="password"value="rural"/>
                <propertyname="alias"value="proxool.a1"/>
                <propertyname="maximumActiveTime"value="300000"/>
                <propertyname="prototypeCount"value="0"/>
                <propertyname="maximumConnectionCount"value="50"/>
                <propertyname="minimumConnectionCount"value="2"/>
                <propertyname="simultaneousBuildThrottle"value="50"/>
                <propertyname="houseKeepingTestSql"value="select CURRENT_DATE"/>
        </bean>
</beans>
 
另外,进行极刑的变态测试,代码***,目的是为了将程序高挂,可惜没挂,呵呵!
import org.springframework.context.ApplicationContext;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;

/**
* Created by IntelliJ IDEA.
*
* @author leizhimin 2009-10-15 17:39:50
*/

public class Test {

        public staticvoid main(String[] args)throws SQLException {
             ApplicationContext ctx = ApplicationContextUtil.getApplicationContext();
                DataSource ds1 = (DataSource)ctx.getBean("dataSource");
                DataSource ds2 = (DataSource)ctx.getBean("dataSource2");

                Connection conn1 = ds1.getConnection();
                Connection conn2 = ds2.getConnection();

                Statement stmt = conn1.createStatement();
                //4:执行SQL,并获取返回结果
                ResultSet rs = stmt.executeQuery("select * from city");
                //5:处理返回结果,此处打印查询结果
                while (rs.next()) {
                        System.out.print(rs.getLong("id") +"\t");
                        System.out.print(rs.getString("name") +"\t");
                        System.out.println();

                        Statement stmt2 = conn2.createStatement();
                        //4:执行SQL,并获取返回结果
//                        ResultSet rs2 = stmt2.executeQuery("select * from city");
                        ResultSet rs2 = stmt2.executeQuery("select * from lm where lm_id = "+rs.getLong("id"));
                        //5:处理返回结果,此处打印查询结果
                        while (rs2.next()) {
                                System.out.println(rs2.getLong(1));
                        }
                        System.out.println("<<<<");
                        //6:关闭数据库连接

                }
                //6:关闭数据库连接
                conn1.close();
                conn2.close();
                

//                System.out.println("----------");
//
//                Statement stmt2 = conn2.createStatement();
//                //4:执行SQL,并获取返回结果
//                ResultSet rs2 = stmt2.executeQuery("select count(*) from lm");
//                //5:处理返回结果,此处打印查询结果
//                while (rs2.next()) {
//                        System.out.println(rs2.getLong(1));
//                }
//                //6:关闭数据库连接
//                conn2.close();


        }
}
 
输出如下:
2009-10-15 18:25:37    - INFO    org.springframework.core.CollectionFactory         - JDK 1.4+ collections available
2009-10-15 18:25:37    - INFO    org.springframework.beans.factory.xml.XmlBeanDefinitionReader         - Loading XML bean definitions fromclass path resource [syndsconfig.xml]
2009-10-15 18:25:37    - INFO    org.springframework.context.support.ClassPathXmlApplicationContext         - Bean factoryfor application context [org.springframework.context.support.ClassPathXmlApplicationContext;hashCode=6161922]: org.springframework.beans.factory.support.DefaultListableBeanFactory defining beans [dataSource,dataSource2]; root of BeanFactory hierarchy
2009-10-15 18:25:37    - INFO    org.springframework.context.support.ClassPathXmlApplicationContext         - 2 beans defined in application context [org.springframework.context.support.ClassPathXmlApplicationContext;hashCode=6161922]
2009-10-15 18:25:37    - INFO    org.springframework.context.support.ClassPathXmlApplicationContext         - Unable to locate MessageSource with name 'messageSource': usingdefault [org.springframework.context.support.DelegatingMessageSource@18dfef8]
2009-10-15 18:25:37    - INFO    org.springframework.context.support.ClassPathXmlApplicationContext         - Unable to locate ApplicationEventMulticaster with name 'applicationEventMulticaster': usingdefault [org.springframework.context.event.SimpleApplicationEventMulticaster@134bed0]
2009-10-15 18:25:37    - INFO    org.springframework.beans.factory.support.DefaultListableBeanFactory         - Pre-instantiating singletons in factory [org.springframework.beans.factory.support.DefaultListableBeanFactory defining beans [dataSource,dataSource2]; root of BeanFactory hierarchy]
410100  郑州市    
<<<<
410200  开封市    
<<<<
410300  洛阳市    
<<<<
410400  平顶山市    
<<<<
410500  安阳市    
<<<<
410600  鹤壁市    
<<<<
410700  新乡市    
<<<<
410800  焦作市    
<<<<
410881  济源市    
<<<<
410900  濮阳市    
<<<<
411000  许昌市    
<<<<
411100  漯河市    
<<<<
411200  三门峡市    
<<<<
411300  南阳市    
<<<<
411400  商丘市    
<<<<
411500  信阳市    
<<<<
411600  周口市    
<<<<
411700  驻马店市    
<<<<
2009-10-15 18:25:39    - INFO    org.logicalcobwebs.proxool.proxool.a2         - Shutting down 'proxool.a2' pool immediately [Shutdown Hook]
2009-10-15 18:25:39    - INFO    org.logicalcobwebs.proxool.proxool.a1         - Shutting down 'proxool.a1' pool immediately [Shutdown Hook]
2009-10-15 18:25:39    - INFO    org.logicalcobwebs.proxool.PrototyperController         - Stopping Prototyper thread
2009-10-15 18:25:39    - INFO    org.logicalcobwebs.proxool.HouseKeeperController         - Stopping HouseKeeper thread

Process finished with exit code 0
 
如果大家想看Web应用的例子,可以参看:
 

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

基于Eclipse Maven的Spring4/Spring-MVC/Hibernate4整合之二: Spring/proxool数据源/Hibernate的配置

我们用的数据库为postgresql 9.4, 连接池用的是proxool。       先全局看看文件分布位置:       先配置web.xml,在里面定义Spring的编码Character...
  • rocklee
  • rocklee
  • 2016年06月15日 10:11
  • 909

proxool配置多个数据源。

Anything outside the "proxool" tag is ignored. -->      MyPool    jdbc:microsoft:sqlserver://localho...
  • shangyu79
  • shangyu79
  • 2008年05月04日 09:01
  • 4076

spring中配置proxool数据源

方式一:  在Spring的"applicationContext.xml"中的dataSource bean定义—— com.mysql.jdbc.Driver jdbc:mysql://loca...
  • yaorongwang
  • yaorongwang
  • 2014年11月11日 13:56
  • 589

Spring学习11-Spring使用proxool连接池 管理数据源

Spring 一、Proxool连接池简介及其配置属性概述   Proxool是一种Java数据库连接池技术。是sourceforge下的一个开源项目,这个项目提供一个健壮、易用的连接池,最为关键...
  • salonzhou
  • salonzhou
  • 2014年12月25日 18:42
  • 1534

Spring MVC 4 学习5: 配置数据源(proxool连接池)及使用例子

proxool是一个非常优秀的数据库连接池,比postgresql自带的强太多了,下面简单讲下如何将proxool作为spring的连接池。      首先在WEB-INF下面建立proxool的配置...
  • rocklee
  • rocklee
  • 2016年01月19日 11:24
  • 3594

spring mvc + proxool 配置

1、proxool 与 spring 是两块内容 org.logicalcobwebs.proxool.ProxoolDriver proxool.applykj ...
  • u011984172
  • u011984172
  • 2015年07月14日 16:51
  • 740

proxool数据库连接池使用方法

proxool数据库连接池使用方法
  • wangshuxuncom
  • wangshuxuncom
  • 2016年03月30日 16:34
  • 1519

Spring+Hibernate与proxool连接池的配置

前一篇文章讲过了如何在Hibernate中配置Proxool以连接oracle 11g,今天这篇来讲针对Spring+Hibernate如何对proxool连接池进行配置。 这次以MySQL为例。 第...
  • qaddafi2008
  • qaddafi2008
  • 2014年01月06日 18:27
  • 2234

tomcat之数据库连接池proxool详细配置

proxool一个数据库连接池框架,提供了对你选择的其它类型的驱动程序的连接池封装。可以非常简单的移植到现存的代码中。完全可配置。快速,成熟,健壮。可以透明地为你现存的JDBC驱动程序增加连接池功能。...
  • u010391029
  • u010391029
  • 2015年07月23日 12:15
  • 1170

JDBC连接多数据库-proxool连接池配置

近来,公司要求将以前sqlserver2008上的某一部分数据导入到现在的oracle11g上来,因为很多表和字段都没对应上,那肯定不能用sql脚本导,既然要连到多个数据库,自然就想到了连接池。 下...
  • youyouxiaoyige
  • youyouxiaoyige
  • 2016年08月22日 22:49
  • 1266
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:配置Spring的Proxool数据源
举报原因:
原因补充:

(最多只允许输入30个字)