歡迎您光臨本站 註冊首頁

Java應用中使用Proxool

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0

  本文題目沒有強調的是Java應用,不是Java Web應用,原因是從網上找有關Proxool的例子,全是一個摸樣,都是將講解Java Web中的應用,真沒勁,難道Proxool離開了web就不能用了?不信你可以google一把看看.

  在閱讀了Proxool的官方指南后,我寫了個簡單測試,扔出來,希望能對大家有用.

  環境:

  JDK 1.5

  proxool-0.9.1.zip

  Oracle 10g

  http://ncu.dl.sourceforge.net/project/proxool/proxool/0.9.1/proxool-0.9.1.zip

  Proxool準確說還算不上一個連接池,因為裡面沒有一個獲取DataSource對象的方法,也沒有一個獲取「**Pool」的途徑.因此要使用Proxool連接池,有兩條路可走,一是自己實現一個連接池的管理工具,二是通過開源的框架來使用,因為好多開源框架實現了池管理功能,比如Spring、Hibernate、iBatis等等.

  Proxool的性能據說還不錯,常常與Spring、Hibernate等整合使用,倒很方便.如果你是做一個Java應用,那麼Proxool不是盞省油的燈,你要自己實現連接池管理,如果水平一般,代碼漏洞會很多.

  這裡我不打算實現什麼連接池管理工具,也不使用開源框架,而是僅僅利用Proxool提供的功能來做一個資料庫操作.

  1、寫Proxool的配置

  Proxool提供了一個介面,用來讀取xml格式或properties格式的配置信息,用來初始化Proxool所需的參數.這裡我用xml配置,當然這個XML是網上找的,我懶得寫,僅僅改吧改吧能用.

<?xml version="1.0" encoding="UTF-8"?>


  <?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的配置,則個可以參考官方文檔,也很方便的.

  有關配置參數,網上的文檔一堆一堆的重複,大家隨便找篇就行.

  本文出自 「熔 岩」 博客:http://lavasoft.blog.51cto.com/62575/212387


[火星人 ] Java應用中使用Proxool已經有1387次圍觀

http://coctec.com/docs/java/show-post-60878.html