配置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

相关文章推荐

spring下配置dbcp,c3p0,proxool数据源链接池(转)

applicationContext-datasource-jdbc.xml  

spring下配置dbcp,c3p0,proxool数据源链接池

不管通过何种持久化技术,都必须通过数据连接访问数据库,在Spring中,数据连接是通过数据源获得的。在以往的应用中,数据源一般是 Web应用服务器提供的。在Spring中,你不但可以通过JNDI获取应...
  • aedi2
  • aedi2
  • 2013年05月10日 14:44
  • 408

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

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

总结spring下配置dbcp,c3p0,proxool数据源链接池

学习参考,原文地址:http://cjb.iteye.com/blog/406631 applicationContext-datasource-jdbc.xml     "-...

spring中配置proxool数据源

方式一:  在Spring的"applicationContext.xml"中的dataSource bean定义—— com.mysql.jdbc.Driver jdbc:mysql://loca...

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

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

spring 的proxool的数据源1

感谢:http://fei-6666.iteye.com/blog/540929 一.下载proxool  去proxool官网下载proxool,最新版本是0.9.1。  下载完后...
  • DR_LF
  • DR_LF
  • 2012年02月15日 23:51
  • 569

Spring配置MySQL数据源

  • 2015年09月15日 21:53
  • 3KB
  • 下载

关于java通过proxool连接数据库多数据源的问题

公司一直是处理大数据这个方面,对数据库操作频繁在所难免,关于数据库连接方式换了很多,各有优缺点,具体就不在这解释了。 之前一直在用C3P0创建数据源,但C3P0占用资源不能及时的释放,导致数据库连接...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:配置Spring的Proxool数据源
举报原因:
原因补充:

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