彩票走势图

Spring的Proxool数据源配置方法

原创|其它|编辑:郝浩|2009-10-20 11:31:01.000|阅读 2658 次

概述:Proxool单独应用比较麻烦,毕竟自己实现的数据库连接池管理工具难免有不足之处,因此可以考虑与Spring结合,形成一个DataSource对象来操作数据库,这样比较简单灵活,可靠性也高。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

  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="//www.springframework.org/schema/beans" 
                xmlns:xsi="//www.w3.org/2001/XMLSchema-instance" 
                xsi:schemaLocation="//www.springframework.org/schema/beans 
  //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="//www.springframework.org/schema/beans" 
                xmlns:xsi="//www.w3.org/2001/XMLSchema-instance" 
                xsi:schemaLocation="//www.springframework.org/schema/beans 
  //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


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn

文章转载自:IT专家网

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP