a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 189|回复: 2

[基础知识] JAVA基础:Java应用中使用Proxool

[复制链接]
发表于 2012-8-4 12:37:27 | 显示全部楼层 |阅读模式
本文题目没有强调的是Java应用,不是Java Web应用,原因是从网上找有关Proxool的例子,全是一个摸样,都是将讲解Java Web中的应用,真没劲,难道Proxool离开了web就不能用了?不信你可以google一把看看。
8 a' s7 T1 {& ?6 f" X  G+ D  在阅读了Proxool的官方指南后,我写了个简单测试,扔出来,希望能对大家有用。
# X6 `3 F5 }' r9 a  环境:
2 I6 Q3 b4 X" x6 q9 W4 I1 U  JDK 1.5
  C4 A+ ^3 {7 ~" S8 S' c  proxool-0.9.1.zip
' b/ E2 J) G: ^$ l  Oracle 10g# b4 x9 |* N2 t5 E  D' c) B
  http://ncu.dl.sourceforge.net/project/proxool/proxool/0.9.1/proxool-0.9.1.zip6 j5 s$ ~" ^9 X# j: k7 n6 `! y
  Proxool准确说还算不上一个连接池,因为里面没有一个获取DataSource对象的方法,也没有一个获取“**Pool”的途径。因此要使用Proxool连接池,有两条路可走,一是自己实现一个连接池的管理工具,二是通过开源的框架来使用,因为好多开源框架实现了池管理功能,比如Spring、Hibernate、iBatis等等。
% Q9 ~' k# R# s% K# I) y2 ~4 n/ Y  Proxool的性能据说还不错,常常与Spring、Hibernate等整合使用,倒很方便。如果你是做一个Java应用,那么Proxool不是盏省油的灯,你要自己实现连接池管理,如果水平一般,代码漏洞会很多。
9 S: c* F# r5 i& ?: |1 d4 [: R  这里我不打算实现什么连接池管理工具,也不使用开源框架,而是仅仅利用Proxool提供的功能来做一个数据库操作。( v4 b% c5 k9 [' M# F4 C; m) J# i6 D
  1、写Proxool的配置
+ h1 {- U; q: {5 X  Proxool提供了一个接口,用来读取xml格式或properties格式的配置信息,用来初始化Proxool所需的参数。这里我用xml配置,当然这个XML是网上找的,我懒得写,仅仅改吧改吧能用。  
+ ]4 ]$ ~5 I( Y& C* w# i  
5 a: b& o/ b' H! o9 `7 @2 v  $ ?# D2 N" |- ?( Z& y
  + [# x0 }& n9 s8 M/ u/ Z
  timalias
2 F- |# _! W7 ?* F  ; ?+ S% T8 V2 M% q; K2 f& ?
  jdbc:oracle:thin:@192.168.104.192:1521:tim# s' W5 ~+ q/ J* A+ x/ k$ R
  3 \0 Y" ]- |0 j# T; P# K
  oracle.jdbc.driver.OracleDriver
+ p0 R  o/ r1 ]9 A8 d' K* V  ( c) J0 L' ]& J; Z
  ! |8 w' f9 p6 D" ^. y
  ! H1 A# R8 l! z2 Z' |& X" m
  
6 k% y5 a" q# f  
0 W2 J( A5 j  b  P7 i$ k  
9 q( Q6 V- g, B: J+ J  2 R' |7 g: R- x: d- t& J
  " f) \0 @5 [7 y$ A! {/ A8 ?7 W
  100! Y. r# }- l3 V, c0 s: R+ V
  " F% w9 `* g$ a1 B, P
  10
* n* i6 x) y# J  
4 ]3 G' }, |* E, T4 o4 j- Y, X/ C  90000  G  ~8 G9 n3 X0 h
  - i' V3 r9 q0 ^  u, I
  10
; L1 K6 o" p" x' w/ g# W  
  o! Y+ f& N6 C  V* \  5* Y8 }; _1 P' n& U. O$ e; X
  # C0 L" U" b& L" I3 j# n
  true, d5 _% A# t5 w* {' Y5 a$ A6 D
  0 [2 K& j* T. e& B7 a
  select sysdate from dual
. D+ Y; x# |' H7 Y8 a: |! `  
$ w2 [8 w4 K, k) h9 D0 x  H. X  
回复

使用道具 举报

 楼主| 发表于 2012-8-4 12:37:28 | 显示全部楼层

JAVA基础:Java应用中使用Proxool

  2、写测试类
6 U; S6 n, t) g/ k% J6 L3 L  import org.logicalcobwebs.proxool.configuration.JAXPConfigurator;
9 u/ m# t" E6 u, F. S* i  import java.sql.Connection;
2 N: x0 G+ [& V5 ^% H' f  import java.sql.DriverManager;
* f, n* O9 T1 {' |  import java.sql.ResultSet;
( W& U+ X9 j) a: F1 E2 R' t& ?/ Q  import java.sql.Statement;
: R; a* ?/ W  o+ @0 ~$ A! }  /**; @( Z4 T7 ]' Y4 {% @
  * Created by IntelliJ IDEA.
, b5 o# l9 _0 O% F5 u$ L; f" M  public class TestProxool {6 x8 j2 ~* F! Y
  public static String dburl = "jdbc:oracle:thin:@192.168.104.192:1521:tim";% H2 @/ u- h3 s# I' A% [: K7 t% h! f
  public static String user = "tim";
8 Y" |2 x8 X3 f1 b8 u( _; J+ T  public static String password = "tim_8968888";+ r6 j6 M6 s: f4 f. T  }1 W
  /**
& V) ?# O. M* f$ r  * JDBC方式测试+ a" D: `3 U* t. j, R
  *
! E9 B- z, |2 \  * @throws Exception
& ?' O0 }% m3 |  */
5 A( A$ Q* _& M  public static void test1() throws Exception {
: w8 h% v5 l- u* X2 X/ V  String testsql = "select * from village t where lastid = 346";8 E3 ?( a- Y# V
  //1:注册驱动类
3 i# w( Y) A- q* c$ P* }- j6 k  Class.forName("oracle.jdbc.driver.OracleDriver");
4 e6 n7 U# v. T, D5 v  //2:创建数据库连接, Y6 k7 ^2 W$ ^6 T- `1 j0 H
  Connection conn = DriverManager.getConnection(dburl, user, password);8 F$ L( G; U. Y3 C
  //3:创建执行SQL的对象( k' I+ d( g2 s: d* u* j
  Statement stmt = conn.createStatement();! j- I* `* W1 D6 o; `
  //4:执行SQL,并获取返回结果
# T  V9 V4 n! i  ResultSet rs = stmt.executeQuery(testsql);9 W/ _0 S, i3 O$ t, B
  //5:处理返回结果,此处打印查询结果
8 W$ S. [8 Z% }3 j4 `* Y  while (rs.next()) {' _: ~$ W; J, c% k, W6 D
  System.out.print(rs.getLong("id") + "\t");
* S8 R3 D6 l! \3 D7 c6 c! f  System.out.print(rs.getString("name") + "\t");0 e7 j6 K9 G: \1 A/ r  v* s. z
  System.out.println();
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-4 12:37:29 | 显示全部楼层

JAVA基础:Java应用中使用Proxool

  }   //6:关闭数据库连接
( q& j, C; d- d* R9 u  conn.close();0 M. Y; H, P- l$ e* c+ Q) F* R+ `) `
  }
  U9 |+ y/ @  c8 K" C/ |  /**% Y* n! O( Y7 G2 u& `/ F
  * proxool方式测试4 w0 F% U6 Z$ k) [+ x7 h
  *9 a9 ]. G7 A2 T- q# ^4 C0 s9 S
  * @throws Exception" d$ C% V; m( X) y& i! h1 V
  */
# f# {% u' d; \  l. t& c7 H  public static void test2() throws Exception {9 Q. U3 M  O3 @# l, G3 U5 N
  //Java应用中先要加载配置文件,否则谁知道你配置给谁用的
. h" V0 I5 C5 ^6 _% Y+ w  JAXPConfigurator.configure("F:\\_test\\synorg\\src\\proxool.xml", false);
3 G! c5 ?4 Q- [1 @7 |9 u  String testsql = "select * from village t where lastid = 346";
; g1 R: B. z. T  //1:注册驱动类,这次这个驱动已经不是Oracle的驱动了,是Proxool专用的驱动7 c4 i! `/ H$ h! s6 Y/ b* i% l1 J% ?
  Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
5 Q  ]8 K) F3 u% G$ ~  //2:创建数据库连接,这个参数是一个字符串,是数据源的别名,在配置文件中配置的timalias,参数格式为:proxool.数据源的别名, u8 M. c: i. \4 s8 R; W2 U' _5 i3 C
  Connection conn = DriverManager.getConnection("proxool.timalias");& E" ?& n$ x# |& U# u* i, G* M
  //3:创建执行SQL的对象
% e( C2 {0 F7 t7 @/ A5 b( D  Statement stmt = conn.createStatement();& e. x" {3 |: |8 S# ^; Y8 V5 i+ K& O
  //4:执行SQL,并获取返回结果4 l, a6 q# [+ `$ L  y
  ResultSet rs = stmt.executeQuery(testsql);( O/ s6 }& x& z/ j' ~7 w
  //5:处理返回结果,此处打印查询结果
. S! P, z+ [8 Y2 F5 {% w  while (rs.next()) {
4 ]: \' k3 g: d2 v, p; B2 R  System.out.print(rs.getLong("id") + "\t");
* Y$ P1 S2 f0 _7 p: n$ f  System.out.print(rs.getString("name") + "\t");
! ^* }4 K& p& g  System.out.println();
( m( i$ Z' B+ G9 H' S9 q; c: B  }6 b: t" ]1 b6 s) R8 F" Y
  //6:关闭数据库连接, c$ _& j8 m/ }+ ~" G' ~
  conn.close();& e$ A0 @2 y( x9 [: _, O: C; _! n
  }" P" Q0 ?; [. B0 p) D
  public static void main(String[] args) throws Exception {
8 n! v# T8 X" ]  test2();, U$ N/ H: [/ k& \! z' Z
  }: [9 J5 [/ o5 Y
  }
9 L- o* h6 }  g$ B( ^  运行结果:. a- t; ~' z2 @! K1 ^7 k
  2009-10-14 18:13:05 - INFO org.logicalcobwebs.proxool.ProxoolFacade - Proxool 0.9.1 (23-Aug-2008 11:10)
! S) ?/ m8 K1 [- s4 h# h  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.
- O1 m( V& t) J4 d/ ?  5411 张一村; P* g7 k& _: p  }" B
  5412 张二村
& [6 w! \2 S. ]  5413 张三村
+ t) o: Y2 t, v* L' E  5414 张四村9 n1 W- {. d9 t/ E$ c6 [$ ?
  5415 南原村
; y: h+ z& L4 u$ L$ }: i  5416 辛庄村
" z" x& y$ L; [6 {! z! H. O  5417 凡村, \- u: _( G" B" Y( @
  5418 西阳村" I" v" c& k1 P& j, g" D4 e  A* [
  5419 人马村
8 ^0 f8 m+ [- K) ^/ P: R  p2 {' t  5420 前关村: U3 w. A' N0 J( e* g! U
  5421 后关村, L% z% [4 R6 m1 j9 X  ^0 V  g
  5422 赵村
8 y4 t7 r4 N' d8 f  5423 水淆村3 n$ |& n: r  X
  5424 沟东村
: k$ f* o% {. q- i! \  5425 陈村
, e0 M8 G; T" U  5426 窑店村1 J+ Y' C1 G5 k6 f
  5427 坡头村
3 D+ C- {0 n8 j# [+ R" w3 S  s% ]' N  20588 大安头
/ T: p% r$ l$ h" ?: [5 X  20589 涧里村
2 a$ a; u1 Z$ X, G4 P& @1 b, V3 k  20590 人马寨& c9 `& K1 e2 E2 m
  20591 白草村
2 b7 S3 C5 B# P5 G  20592 窑院村. E, c2 m) V9 k7 V0 {* k: v
  20593 寺下村: b) b3 ~4 `8 j" z& }
  20594 反上村' H9 O2 D/ f1 k, f! a4 `
  33651 小安头1 R& G4 x: f0 F  F* \" B1 c
  33652 五花岭
& o* Z; i6 C) j* ?( T8 [  33653 东沟
# ~( z+ J( e' E3 c8 I  33654 西沟# Y* ~1 ~; Q, W! k
  33655 南沟
" _* g* Y) }8 r9 Q2 I6 Q- W5 P. c/ ]  33656 王村- O3 S( k% n$ K- o! O7 a
  33657 营前  I$ r( }& ], g  G# k0 W
  33659 东阳
% y: r% T, t* O% M: t  33661 太阳8 V* j. ?. A( m2 O
  33663 丰阳3 N! j3 e6 h' H; b- d; P
  33665 宜村$ i+ Q% h, q+ V0 p- t
  33667 窑头
0 L2 X7 w4 z3 Z3 o0 \% ~0 o7 \# t8 @9 Y  32225 石原村
& c, c3 l2 k, P& i. t/ Y+ W  32226 庙上村: p* ~7 e. H4 d4 o$ J/ R
  32227 庙洼" N5 H: o1 I) `+ I. x; _
  38739 丁管营+ T5 m7 s% J; ^$ P! d) A
  38841 涧西
$ n2 U- D/ \% _& e8 B* _" a; z  2009-10-14 18:13:06 - INFO org.logicalcobwebs.proxool.timalias - Shutting down 'timalias' pool immediately [Shutdown Hook]$ _$ Y+ y( A# S# L
  2009-10-14 18:13:07 - INFO org.logicalcobwebs.proxool.PrototyperController - Stopping Prototyper thread
( ?+ b# U) F5 o- c; S7 C  2009-10-14 18:13:07 - INFO org.logicalcobwebs.proxool.HouseKeeperController - Stopping HouseKeeper thread1 i7 t  L  q0 b! Y/ r
  Process finished with exit code 08 J$ P0 G. v/ |% g9 W
  因为使用了log4j,这个结果里面输出了一些日志信息。
( A2 @2 ?# D. {5 L' [4 E  3、说明9 @+ r! p5 c+ k7 Y
  Proxool的配置文件路径不能使用ClassPath,我查看过接口代码,可以传入一个XmlReader、或流来解决,这里写成绝对路径就凑合着能跑起来就行。6 L' T0 ^0 s2 p  V
  也支持Properties的配置,则个可以参考官方文档,也很方便的。4 b$ ?4 o# V0 O
  有关配置参数,网上的文档一堆一堆的重复,大家随便找篇就行。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-4-29 23:07 , Processed in 0.230677 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表