在hibernate
中
已經不再支持dbcp了
hibernate的作者在中
明確指出在實踐中發現dbcp有BUG
在某些種情會產生很多空連接不能釋放
所以拋棄了對dbcp的支持
至於c
p
有評論說它的算法不是最優的
c
p
占用資源比較大
效率也不高
proxool不少行家推薦使用
而且暫時來說
是負面評價是最少的一個
以連接MySQl為例介紹三種連接配置方法
<!
JDBC驅動程序
>
<property name=
connection
driver_class
>org
gjt
mm
mysql
Driver
</property>
<property name=
connection
url
>jdbc:mysql://localhost:
/struts?useUnicode=true&characterEncoding=GBK
</property>
<property name=
connection
username
>root</property><!
數據庫用戶名
>
<property name=
connection
password
>
</property> <!
數據庫密碼
>
上面的一段配置
在c
p
和dbcp中
都是必需的
因為hibernate會根據上述的配置來生成connections
再交給c
p
或dbcp管理
但是
proxool則不能
C
P
只需在hibernate
cfg
xml中加入
<property name=
c
p
min_size
>
</property>
<property name=
c
p
max_size
>
</property>
<property name=
c
p
time_out
>
</property>
<property name=
c
p
max_statement
>
</property>
還有在classespath中加入c
p
jar
dbcp
在hibernate
cfg
xml中加入
<property name=
dbcp
maxActive
>
</property>
<property name=
dbcp
whenExhaustedAction
>
</property>
<property name=
dbcp
maxWait
>
</property>
<property name=
dbcp
maxIdle
>
</property>
<property name=
dbcp
ps
maxActive
>
</property>
<property name=
dbcp
ps
whenExhaustedAction
>
</property>
<property name=
dbcp
ps
maxWait
>
</property>
<property name=
dbcp
ps
maxIdle
>
</property>
還有在classespath中加入commons
pool
jar 和commons
dbcp
jar
proxool
在hibernate
cfg
xml中加入
<property name=
proxool
pool_alias
>pool
</property>
<property name=
proxool
xml
>ProxoolConf
xml</property>
<property name=
connection
provider_class
>nnection
ProxoolConnectionProvider</property>
然後
在和hibernate
cfg
xml同一個目錄下
加一個ProxoolConf
xml文件
內容為
<?xml version=
encoding=
utf
?>
<!
the proxool configuration can be embedded within your own application
s
Anything outside the
proxool
tag is ignored
>
<something
else
entirely>
<proxool>
<alias>pool
</alias>
<!
proxool只能管理由自己產生的連接
>
<driver
url>jdbc:mysql://localhost:
/struts?useUnicode=true&characterEncoding=GBK</driver
url>
<driver
class>org
gjt
mm
mysql
Driver</driver
class>
<driver
properties>
<property name=
user
value=
root
/>
<property name=
password
value=
/>
</driver
properties>
<!
proxool自動偵察各個連接狀態的時間間隔(毫秒)
偵察到空閒的連接就馬上回收
超時的銷毀
>
<house
keeping
sleep
time>
</house
keeping
sleep
time>
<!
指因未有空閒連接可以分配而在隊列中等候的最大請求數
超過這個請求數的用戶連接就不會被接受
>
<maximum
new
connections>
</maximum
new
connections>
<!
最少保持的空閒連接數
>
<prototype
count>
</prototype
count>
<!
允許最大連接數
超過了這個連接
再有請求時
就排在隊列中等候
最大的等待請求數由maximum
new
connections決定
>
<maximum
connection
count>
</maximum
connection
count>
<!
最小連接數
>
<minimum
connection
count>
</minimum
connection
count>
</proxool>
</something
else
entirely>
並在classespath中加入proxool
jar
如果用的是hibernate
在myeclipse中導入hibernate
包時
同時導入advanced support 類庫
則裡面已經有好幾個連接池可以用了
如c
p
proxool等
只要稍微配置下就可以
配置下日志(log
j
properties)
你就可以詳細的看到連接池運行的過程了
From:http://tw.wingwit.com/Article/program/Java/ky/201311/27953.html