开发者社区> 技术小阿哥> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

        <bean id="dataSource" 
                    class="org.logicalcobwebs.proxool.ProxoolDataSource"> 
                <property name="driver"> 
                        <value>oracle.jdbc.driver.OracleDriver</value> 
                </property> 
                <property name="driverUrl"> 
                        <value>jdbc:oracle:thin:@192.168.104.192:1521:tim</value> 
                </property> 
                <property name="user" value="tim"/> 
                <property name="password" value="tim_8968888"/> 
                <property name="alias" value="Pool_dbname"/> 
                <property name="maximumActiveTime" value="300000"/> 
                <property name="prototypeCount" value="0"/> 
                <property name="maximumConnectionCount" value="50"/> 
                <property name="minimumConnectionCount" value="2"/> 
                <property name="simultaneousBuildThrottle" value="50"/> 
                <property name="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 static void main(String[] args) { 
                rebuildApplicationContext(); 
                if (applicationContext == null) { 
                        System.out.println("ApplicationContext is null"); 
                } else { 
                        System.out.println("ApplicationContext is not null!"); 
                } 
        } 
}
 
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 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); 
                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 static void 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 from class path resource [syndsconfig.xml] 
2009-10-15 12:37:04    - INFO    org.springframework.context.support.ClassPathXmlApplicationContext         - Bean factory for 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': using default [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': using default[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"> 

        <bean id="dataSource" 
                    class="org.logicalcobwebs.proxool.ProxoolDataSource"> 
                <property name="driver"> 
                        <value>oracle.jdbc.driver.OracleDriver</value> 
                </property> 
                <property name="driverUrl"> 
                        <value>jdbc:oracle:thin:@192.168.104.192:1521:tim</value> 
                </property> 
                <property name="user" value="tim"/> 
                <property name="password" value="tim_8968888"/> 
                <property name="alias" value="proxool.a2"/> 
                <property name="maximumActiveTime" value="300000"/> 
                <property name="prototypeCount" value="0"/> 
                <property name="maximumConnectionCount" value="50"/> 
                <property name="minimumConnectionCount" value="2"/> 
                <property name="simultaneousBuildThrottle" value="50"/> 
                <property name="houseKeepingTestSql" value="select CURRENT_DATE"/> 
        </bean> 
        <bean id="dataSource2" 
                    class="org.logicalcobwebs.proxool.ProxoolDataSource"> 
                <property name="driver"> 
                        <value>oracle.jdbc.driver.OracleDriver</value> 
                </property> 
                <property name="driverUrl"> 
                        <value>jdbc:oracle:thin:@192.168.104.164:1521:orcl</value> 
                </property> 
                <property name="user" value="rural"/> 
                <property name="password" value="rural"/> 
                <property name="alias" value="proxool.a1"/> 
                <property name="maximumActiveTime" value="300000"/> 
                <property name="prototypeCount" value="0"/> 
                <property name="maximumConnectionCount" value="50"/> 
                <property name="minimumConnectionCount" value="2"/> 
                <property name="simultaneousBuildThrottle" value="50"/> 
                <property name="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 static void 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 from class path resource [syndsconfig.xml] 
2009-10-15 18:25:37    - INFO    org.springframework.context.support.ClassPathXmlApplicationContext         - Bean factory for 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': using default [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': using default[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应用的例子,可以参看:
 

本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/212616,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【Spring】Spring常用配置-Bean的Scope
【Spring】Spring常用配置-Bean的Scope
62 0
【Spring】Spring常用配置-Bean的Scope
转载请注明出处:http://blog.csdn.net/qq_26525215 本文源自【大学之旅_谙忆的博客】 分析 Scope(范围)描述的是Spring容器如何新建Bean的实例的。
866 0
Spring Boot 应用可视化监控,一目了然!
Spring Boot 应用可视化监控,一目了然!
199 0
Spring Boot中使用Spring Security进行安全控制
Spring Boot中使用Spring Security进行安全控制
154 0
Spring Boot 实现定时任务的 4 种方式
定时任务实现的几种方式: Timer:这是java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的较少。
118 0
企业级 SpringBoot 教程 (二)Spring Boot配置文件详解
springboot采纳了建立生产就绪Spring应用程序的观点。 Spring Boot优先于配置的惯例,旨在让您尽快启动和运行。在一般情况下,我们不需要做太多的配置就能够让spring boot正常运行。
1141 0
Spring boot 通用配置文件模板
001 # =================================================================== 002 # COMMON SPRING BOOT PROPERTIES 003 # 004 # This sample file is provided as a guideline.
1618 0
Spring Boot 启动加载数据 CommandLineRunner
实际应用中,我们会有在项目服务启动的时候就去加载一些数据或做一些事情这样的需求。 为了解决这样的问题,Spring Boot 为我们提供了一个方法,通过实现接口 CommandLineRunner 来实现。
967 0
13688
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载