免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Java框架數(shù)據(jù)庫連接池比較(c3p0,dbcp和proxool)
現(xiàn)在常用的開源數(shù)據(jù)連接池主要有c3p0,dbcp和proxool三種,其中: 
¨         hibernate開發(fā)組推薦使用c3p0; 
¨         spring開發(fā)組推薦使用dbcp (dbcp連接池有weblogic連接池同樣的問題,就是強行關(guān)閉連接或數(shù)據(jù)庫重啟后,無法reconnect ,告訴連接被重置,這個設(shè)置可以解決); 
¨         hibernate in action推薦使用c3p0和proxool; 
下面具體就每種連接池的調(diào)研結(jié)果進行說明: 
1. Apache-DBCP 
Ø BasicDataSource 相關(guān)的參數(shù)說明 
dataSource: 要連接的 datasource (通常我們不會定義在 server.xml) 
defaultAutoCommit: 對于事務(wù)是否 autoCommit, 默認值為 true 
defaultReadOnly: 對于數(shù)據(jù)庫是否只能讀取, 默認值為 false 
driverClassName:連接數(shù)據(jù)庫所用的 JDBC Driver Class, 
maxActive: 可以從對象池中取出的對象最大個數(shù),為0則表示沒有限制,默認為8 
maxIdle: 最大等待連接中的數(shù)量,設(shè) 0 為沒有限制 (對象池中對象最大個數(shù)) 
minIdle:對象池中對象最小個數(shù) 
maxWait: 最大等待秒數(shù), 單位為 ms, 超過時間會丟出錯誤信息 
password: 登陸數(shù)據(jù)庫所用的密碼 
url: 連接數(shù)據(jù)庫的 URL 
username: 登陸數(shù)據(jù)庫所用的賬號 
validationQuery: 驗證連接是否成功, SQL SELECT 指令至少要返回一行 
removeAbandoned: 是否自我中斷, 默認是 false 
removeAbandonedTimeout: 幾秒后會自我中斷, removeAbandoned 必須為 true 
logAbandoned: 是否記錄中斷事件, 默認為 false 
minEvictableIdleTimeMillis:大于0 ,進行連接空閑時間判斷,或為0,對空閑的連接不進行驗證;默認30分鐘 
timeBetweenEvictionRunsMillis:失效檢查線程運行時間間隔,如果小于等于0,不會啟動檢查線程,默認-1 
testOnBorrow:取得對象時是否進行驗證,檢查對象是否有效,默認為false 
testOnReturn:返回對象時是否進行驗證,檢查對象是否有效,默認為false 
testWhileIdle:空閑時是否進行驗證,檢查對象是否有效,默認為false 
Ø 在使用DBCP的時候,如果使用默認值,則數(shù)據(jù)庫連接因為某種原因斷掉后,再從連接池中取得連接又不進行驗證,這時取得的連接實際上就會是無效的數(shù)據(jù)庫連接。因此為了防止獲得的數(shù)據(jù)庫連接失效,在使用的時候最好保證: 
username: 登陸數(shù)據(jù)庫所用的賬號 
validationQuery:SELECT COUNT(*) FROM DUAL 
testOnBorrow、testOnReturn、testWhileIdle:最好都設(shè)為true 
minEvictableIdleTimeMillis:大于0 ,進行連接空閑時間判斷,或為0,對空閑的連接不進行驗證 
timeBetweenEvictionRunsMillis:失效檢查線程運行時間間隔,如果小于等于0,不會啟動檢查線程 
Ø PS:在構(gòu)造GenericObjectPool [BasicDataSource在其createDataSource () 方法中也會使用GenericObjectPool] 時,會生成一個內(nèi)嵌類Evictor,實現(xiàn)自Runnable接口。如果timeBetweenEvictionRunsMillis大于0,每過timeBetweenEvictionRunsMillis毫秒Evictor會調(diào)用evict()方法,檢查對象的閑置時間是否大于 minEvictableIdleTimeMillis毫秒(_minEvictableIdleTimeMillis小于等于0時則忽略,默認為30分鐘),是則銷毀此對象,否則就激活并校驗對象,然后調(diào)用ensureMinIdle方法檢查確保池中對象個數(shù)不小于_minIdle。在調(diào)用returnObject方法把對象放回對象池,首先檢查該對象是否有效,然后調(diào)用PoolableObjectFactory 的passivateObject方法使對象處于非活動狀態(tài)。再檢查對象池中對象個數(shù)是否小于maxIdle,是則可以把此對象放回對象池,否則銷毀此對象 
Ø 上述特性的可設(shè)置性已在代碼中驗證,具體性能是否能實現(xiàn)有待實際驗證 
2. C3P0 
Ø C3P0的官方example中使用的數(shù)據(jù)源為ComboPooledDataSource,網(wǎng)上一篇文章詳細介紹了C3P0連接池配置中各項含義[這些配置項的含義在下載解壓c3p0的壓縮包之后目錄的doc\index.html中的Configuration部分也有詳細的介紹,這里偷下懶:P],現(xiàn)摘錄如下: 
<c3p0-config> 
<default-config> 
<!--當連接池中的連接耗盡的時候c3p0一次同時獲取的連接數(shù)。Default: 3 --> 
<property name="acquireIncrement">3</property> 

<!--定義在從數(shù)據(jù)庫獲取新連接失敗后重復(fù)嘗試的次數(shù)。Default: 30 --> 
<property name="acquireRetryAttempts">30</property> 

<!--兩次連接中間隔時間,單位毫秒。Default: 1000 --> 
<property name="acquireRetryDelay">1000</property> 

<!--連接關(guān)閉時默認將所有未提交的操作回滾。Default: false --> 
<property name="autoCommitOnClose">false</property> 

<!--c3p0將建一張名為Test的空表,并使用其自帶的查詢語句進行測試。如果定義了這個參數(shù)那么 
屬性preferredTestQuery將被忽略。你不能在這張Test表上進行任何操作,它將只供c3p0測試 
使用。Default: null--> 
<property name="automaticTestTable">Test</property> 

<!--獲取連接失敗將會引起所有等待連接池來獲取連接的線程拋出異常。但是數(shù)據(jù)源仍有效 
保留,并在下次調(diào)用getConnection()的時候繼續(xù)嘗試獲取連接。如果設(shè)為true,那么在嘗試 
獲取連接失敗后該數(shù)據(jù)源將申明已斷開并永久關(guān)閉。Default: false--> 
<property name="breakAfterAcquireFailure">false</property> 

<!--當連接池用完時客戶端調(diào)用getConnection()后等待獲取新連接的時間,超時后將拋出 
SQLException,如設(shè)為0則無限期等待。單位毫秒。Default: 0 --> 
<property name="checkoutTimeout">100</property> 

<!--通過實現(xiàn)ConnectionTester或QueryConnectionTester的類來測試連接。類名需制定全路徑。 
Default: com.mchange.v2.c3p0.impl.DefaultConnectionTester--> 
<property name="connectionTesterClassName"></property> 

<!--指定c3p0 libraries的路徑,如果(通常都是這樣)在本地即可獲得那么無需設(shè)置,默認null即可 
Default: null--> 
<property name="factoryClassLocation">null</property> 

<!--Strongly disrecommended. Setting this to true may lead to subtle and bizarre bugs. 
(文檔原文)作者強烈建議不使用的一個屬性--> 
<property name="forceIgnoreUnresolvedTransactions">false</property> 

<!--每60秒檢查所有連接池中的空閑連接。Default: 0 --> 
<property name="idleConnectionTestPeriod">60</property> 

<!--初始化時獲取三個連接,取值應(yīng)在minPoolSize與maxPoolSize之間。Default: 3 --> 
<property name="initialPoolSize">3</property> 

<!--最大空閑時間,60秒內(nèi)未使用則連接被丟棄。若為0則永不丟棄。Default: 0 --> 
<property name="maxIdleTime">60</property> 

<!--連接池中保留的最大連接數(shù)。Default: 15 --> 
<property name="maxPoolSize">15</property> 

<!--JDBC的標準參數(shù),用以控制數(shù)據(jù)源內(nèi)加載的PreparedStatements數(shù)量。但由于預(yù)緩存的statements 
屬于單個connection而不是整個連接池。所以設(shè)置這個參數(shù)需要考慮到多方面的因素。 
如果maxStatements與maxStatementsPerConnection均為0,則緩存被關(guān)閉。Default: 0--> 
<property name="maxStatements">100</property> 

<!--maxStatementsPerConnection定義了連接池內(nèi)單個連接所擁有的最大緩存statements數(shù)。Default: 0 --> 
<property name="maxStatementsPerConnection"></property> 

<!--c3p0是異步操作的,緩慢的JDBC操作通過幫助進程完成。擴展這些操作可以有效的提升性能 
通過多線程實現(xiàn)多個操作同時被執(zhí)行。Default: 3--> 
<property name="numHelperThreads">3</property> 

<!--當用戶調(diào)用getConnection()時使root用戶成為去獲取連接的用戶。主要用于連接池連接非c3p0 
的數(shù)據(jù)源時。Default: null--> 
<property name="overrideDefaultUser">root</property> 

<!--與overrideDefaultUser參數(shù)對應(yīng)使用的一個參數(shù)。Default: null--> 
<property name="overrideDefaultPassword">password</property> 

<!--密碼。Default: null--> 
<property name="password"></property> 

<!--定義所有連接測試都執(zhí)行的測試語句。在使用連接測試的情況下這個一顯著提高測試速度。注意: 
測試的表必須在初始數(shù)據(jù)源的時候就存在。Default: null--> 
<property name="preferredTestQuery">select id from test where id=1</property> 

<!--用戶修改系統(tǒng)配置參數(shù)執(zhí)行前最多等待300秒。Default: 300 --> 
<property name="propertyCycle">300</property> 

<!--因性能消耗大請只在需要的時候使用它。如果設(shè)為true那么在每個connection提交的 
時候都將校驗其有效性。建議使用idleConnectionTestPeriod或automaticTestTable 
等方法來提升連接測試的性能。Default: false --> 
<property name="testConnectionOnCheckout">false</property> 

<!--如果設(shè)為true那么在取得連接的同時將校驗連接的有效性。Default: false --> 
<property name="testConnectionOnCheckin">true</property> 

<!--用戶名。Default: null--> 
<property name="user">root</property> 

<!--早期的c3p0版本對JDBC接口采用動態(tài)反射代理。在早期版本用途廣泛的情況下這個參數(shù) 
允許用戶恢復(fù)到動態(tài)反射代理以解決不穩(wěn)定的故障。最新的非反射代理更快并且已經(jīng)開始 
廣泛的被使用,所以這個參數(shù)未必有用?,F(xiàn)在原先的動態(tài)反射與新的非反射代理同時受到 
支持,但今后可能的版本可能不支持動態(tài)反射代理。Default: false--> 
<property name="usesTraditionalReflectiveProxies">false</property> 
<property name="automaticTestTable">con_test</property> 
    <property name="checkoutTimeout">30000</property> 
    <property name="idleConnectionTestPeriod">30</property> 
    <property name="initialPoolSize">10</property> 
    <property name="maxIdleTime">30</property> 
    <property name="maxPoolSize">25</property> 
    <property name="minPoolSize">10</property> 
    <property name="maxStatements">0</property> 
    <user-overrides user="swaldman"> 
    </user-overrides> 
</default-config> 
<named-config name="dumbTestConfig"> 
    <property name="maxStatements">200</property> 
    <user-overrides user="poop"> 
      <property name="maxStatements">300</property> 
    </user-overrides> 
   </named-config> 
</c3p0-config> 
Ø 上述特性的可設(shè)置性已在代碼中驗證,具體性能是否能實現(xiàn)有待實際驗證 
Ø 從配置項的內(nèi)容來看,C3P0和DBCP都有比較詳細的有關(guān)連接檢測保證的配置,我們可以看到C3P0可以控制數(shù)據(jù)源內(nèi)加載的PreparedStatements數(shù)量,并且可以設(shè)置幫助線程的數(shù)量來提升JDBC操作的速度,這些是DBCP未提供的;另外從網(wǎng)絡(luò)上的評價來看,DBCP出現(xiàn)Bug的頻率要大于C3P0,不過這一點有待于我們自己實際的檢測。 
3. Proxool 
Ø Proxool的使用和dbcp以及c3p0稍有不同,我們需要并且只需要在使用基本的java.sql.DriverManager之前加載org.logicalcobwebs.proxool.ProxoolDriver驅(qū)動類,并且按照proxool定義的url格式 ["proxool." + alias + ":" + driverClass + ":" + driverUrl ,其中alias是為連接池自定義的別名] 來獲得connection;具體的可以參看proxool doc下的UserGuide,或本文所附的示例代碼。下面對連接池的特性配置作詳細說明 [這個是自己翻譯的,不一定準確,有問題時請參看doc下的Properties ~]。 
n fatal-sql-exception 
以逗號隔開的異常列表,當設(shè)置了此項之后,每當出現(xiàn)SQLException時都將與列表中異常項作比較,如果匹配則認為出現(xiàn)fatal異常,這將導(dǎo)致connection被丟棄,并且不論出現(xiàn)任何情況該異常將被重拋一次以通知用戶發(fā)生的情況。默認值為null 
n fatal-sql-exception-wrapper-class 
如果配置了fatal-sql-exception,則默認的操作是丟棄引起SQLException的原因而只是拋出原始異常。使用fatal-sql-exception-wrapper-class這個特性可以將SQLException包裝到繼承SQLException或RunTimeException的任何異常類里。Proxool提供了兩個類供使用FatalSQLException和FatalRunTimeException;使用這兩個類的話就將該選項設(shè)置為'org.logicalcobwebs.proxool.FatalSQLException'或者'org.logicalcobwebs.proxool.FatalRuntimeException'。默認值為null 
n house-keeping-sleep-time 
proxool自動偵察各個連接狀態(tài)的時間間隔(毫秒),偵察到空閑的連接就馬上回收,超時的銷毀,默認值為30秒 
n house-keeping-test-sql 
如果偵察線程發(fā)現(xiàn)閑置連接,則會使用這個SQL語句來對這些連接進行檢查;這項設(shè)置的語句應(yīng)該能夠被很快的執(zhí)行,例如查詢當前時間 [info.setProperty("proxool.house-keeping-test-sql", "select CURRENT_DATE");] 。如果不設(shè)置則該選項被忽略 
n injectable-connection-interface、injectable-statement-interface、injectable-prepared-statement-interface、injectable-callable-statement-interface 
n jmx 
如果此項設(shè)為true,則連接池將被以名稱"Proxool:type=Pool, name=<alias>"注冊為JMS Server的MBean。默認值為false 
n jmx-agent-id 
當且僅當jmx選項設(shè)為true時使用,為以逗號分隔的連接持注冊到的JMS代理名稱列表;如果不設(shè)置則所有注冊的JMX Server都將被使用 
n maximum-active-time 
線程最大存活時間,超過此時間的線程將被守護線程kill掉,默認值為5分鐘 
n maximum-connection-count 
到數(shù)據(jù)庫的最大連接數(shù),超過了這個連接,再有請求時,就排在隊列中等候,最大的等待請求數(shù)由simultaneous-build-throttle決定;默認值為15 
n maximum-connection-lifetime 
連接最大存活時間,毫秒為單位,默認值為4小時 
n minimum-connection-count 
不管是否被使用都保持開放的最小連接數(shù),默認值為5 
n overload-without-refusal-lifetime 
用來判斷連接池狀態(tài),如果在此選項設(shè)置時間內(nèi)(毫秒為單位)拒絕了連接,則認為過負載。默認值為60秒 
n prototype-count 
最少保持的空閑連接數(shù),注意與minimum-connection-count區(qū)分。默認值為0 
n simultaneous-build-throttle 
最大的等待請求數(shù),默認值為10 
n test-before-use 
如果設(shè)為true則connection在使用前將以house-keeping-test-sql設(shè)置的語句測試,如果測試不通過則該connection被丟棄并會重新分配一個connection。默認為false 
n test-after-use 
如果設(shè)為true則connection在關(guān)閉(放回連接池)前將以house-keeping-test-sql設(shè)置的語句測試,如果測試不通過connection將被丟棄。默認值為false 
Ø 與其它連接池特性的設(shè)置方法不同,Proxool不提供相應(yīng)的set方法,所有特性都要以諸如info.setProperty("proxool.jmx", "false");方式設(shè)定 
Ø 上述特性的可設(shè)置性已在代碼中驗證,具體性能是否能實現(xiàn)有待實際驗證 
Ø Proxool與DBCP以及C3P0的性能比較,網(wǎng)上眾說紛紜,有待我們自己的測試;
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
DBCP,C3P0,Proxool,BoneCP參數(shù)介紹 - 三木的日志 - 網(wǎng)易博客
【Hibernate總結(jié)系列】hibernate.cfg.xml配置 - 阿蜜果 - Bl...
JdbcUtils工具類
轉(zhuǎn)hibernate連接池配置
Hibernate連接池配置方法剖析
三種流行的連接池配置
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服