一、BoneCP配置文件格式(bonecp-config.xml):
<?xml version="1.0" encoding="UTF-8"?>
<bonecp-config>
<default-config>
<!--
-->
<property name="
">
</property>
</default-config>
</bonecp-config>
二、BoneCP主要配置參數(shù) <bonecp-config>
<default-config>
<!--

<property name="


</default-config>
</bonecp-config>
1.jdbcUrl
設(shè)置數(shù)據(jù)庫(kù)URL
2.username
設(shè)置數(shù)據(jù)庫(kù)用戶名
3.password
設(shè)置數(shù)據(jù)庫(kù)密碼
4.partitionCount
設(shè)置分區(qū)個(gè)數(shù)。這個(gè)參數(shù)默認(rèn)為1,建議3-4(根據(jù)特定應(yīng)用程序而定)。
為了減少鎖競(jìng)爭(zhēng)和改善性能,從當(dāng)前線程分區(qū)(thread-affinity)中獲取一個(gè)connection,
也就是這個(gè)樣子:partitions[Thread.currentThread().getId() % partitionCount]。當(dāng)擁有充足的短期(short-lived)的線程時(shí)候,這個(gè)參數(shù)設(shè)置越大,性能越好。當(dāng)超過(guò)一定的閥值時(shí),連接池的維護(hù)工作就可能對(duì)性能造成一定的負(fù)面影響(僅當(dāng)分區(qū)上的connection使用耗盡時(shí))。
5.maxConnectionsPerPartition
設(shè)置每個(gè)分區(qū)含有connection最大個(gè)數(shù)。這個(gè)參數(shù)默認(rèn)為2。如果小于2,BoneCP將設(shè)置為50。
比如:partitionCount設(shè)置為3,maxConnectionPerPartition設(shè)置為5,你就會(huì)擁有總共15個(gè)connection。
注意:BoneCP不會(huì)將這些connection一起創(chuàng)建出來(lái),而是說(shuō)在需要更多connection的時(shí)候從minConnectionsPerPartition參數(shù)開始逐步地增長(zhǎng)connection數(shù)量。
6.minConnectionsPerPartition
設(shè)置每個(gè)分區(qū)含有connection最大小個(gè)數(shù)。這個(gè)參數(shù)默認(rèn)為0。
7.acquireIncrement
設(shè)置分區(qū)中的connection增長(zhǎng)數(shù)量。這個(gè)參數(shù)默認(rèn)為1。
當(dāng)每個(gè)分區(qū)中的connection大約快用完時(shí),BoneCP動(dòng)態(tài)批量創(chuàng)建connection,
這個(gè)屬性控制一起創(chuàng)建多少個(gè)connection(不會(huì)大于maxConnectionsPerPartition)。
注意:這個(gè)配置屬于每個(gè)分區(qū)的設(shè)置。
8.poolAvailabilityThreshold
設(shè)置連接池閥值。這個(gè)參數(shù)默認(rèn)為20。如果小于0或是大于100,BoneCP將設(shè)置為20。
連接池觀察線程(PoolWatchThread)試圖為每個(gè)分區(qū)維護(hù)一定數(shù)量的可用connection。
這個(gè)數(shù)量趨于maxConnectionPerPartition和minConnectionPerPartition之間。這個(gè)參數(shù)是以百分比的形式來(lái)計(jì)算的。例如:設(shè)置為20,下面的條件如果成立:Free Connections / MaxConnections < poolAvailabilityThreshold;就會(huì)創(chuàng)建出新的connection。
換句話來(lái)說(shuō)連接池為每個(gè)分區(qū)至少維持20%數(shù)量的可用connection。
設(shè)置為0時(shí),每當(dāng)需要connection的時(shí)候,連接池就要重新創(chuàng)建新connection,這個(gè)時(shí)候可能導(dǎo)致應(yīng)用程序可能會(huì)為了獲得新connection而小等一會(huì)。
9.connectionTimeout
設(shè)置獲取connection超時(shí)的時(shí)間。這個(gè)參數(shù)默認(rèn)為L(zhǎng)ong.MAX_VALUE;單位:毫秒。
在調(diào)用getConnection獲取connection時(shí),獲取時(shí)間超過(guò)了這個(gè)參數(shù),就視為超時(shí)并報(bào)異常。
三、BoneCP線程配置參數(shù)
1.releaseHelperThreads
設(shè)置connection助手線程個(gè)數(shù)。這個(gè)參數(shù)默認(rèn)為3。如果小于0,BoneCP將設(shè)置為3。
設(shè)置為0時(shí),應(yīng)用程序線程被阻塞,直到連接池執(zhí)行必要地清除和回收connection,并使connection在其它線程可用。
設(shè)置大于0時(shí),連接池在每個(gè)分區(qū)中創(chuàng)建助手線程處理回收關(guān)閉后的connection(應(yīng)用程序會(huì)通過(guò)助手線程異步地將這個(gè)connection放置到一個(gè)臨時(shí)隊(duì)列中進(jìn)行處理)。
對(duì)于應(yīng)用程序在每個(gè)connection上處理大量工作時(shí)非常有用。可能會(huì)降低運(yùn)行速度,不過(guò)在高并發(fā)的應(yīng)用中會(huì)提高性能。
2.statementReleaseHelperThreads
設(shè)置statement助手線程個(gè)數(shù)。這個(gè)參數(shù)默認(rèn)為3。如果小于0,BoneCP將設(shè)置為3。
設(shè)置為0時(shí),應(yīng)用程序線程被阻塞,直到連接池或JDBC驅(qū)動(dòng)程序關(guān)閉statement。
設(shè)置大于0時(shí),連接池會(huì)在每個(gè)分區(qū)中創(chuàng)建助理線程,異步地幫助應(yīng)用程序關(guān)閉statement當(dāng)應(yīng)用程序打開了大量的statement是非常有用的。可能會(huì)降低運(yùn)行速度,不過(guò)在高并發(fā)的應(yīng)用中會(huì)提高性能。
3.maxConnectionAge
設(shè)置connection的存活時(shí)間。這個(gè)參數(shù)默認(rèn)為0,單位:毫秒。設(shè)置為0該功能失效。
通過(guò)ConnectionMaxAgeThread觀察每個(gè)分區(qū)中的connection,不管connection是否空閑,如果這個(gè)connection距離創(chuàng)建的時(shí)間大于這個(gè)參數(shù)就會(huì)被清除。當(dāng)前正在使用的connection不受影響,直到返回到連接池再做處理。
4.idleMaxAge
設(shè)置connection的空閑存活時(shí)間。這個(gè)參數(shù)默認(rèn)為60,單位:分鐘。設(shè)置為0該功能失效。
通過(guò)ConnectionTesterThread觀察每個(gè)分區(qū)中的connection,如果這個(gè)connection距離最后使用的時(shí)間大于這個(gè)參數(shù)就會(huì)被清除。
注意:這個(gè)參數(shù)僅和idleConnectionTestPeriod搭配使用,而且不要在這里設(shè)置任何挑釁的參數(shù)!
5.idleConnectionTestPeriod
設(shè)置測(cè)試connection的間隔時(shí)間。這個(gè)參數(shù)默認(rèn)為240,單位:分鐘。設(shè)置為0該功能失效。
通過(guò)ConnectionTesterThread觀察每個(gè)分區(qū)中的connection, 如果這個(gè)connection距離最后使用的時(shí)間大于這個(gè)參數(shù)并且距離上一次測(cè)試的時(shí)間大于這個(gè)參數(shù)就會(huì)向數(shù)據(jù)庫(kù)發(fā)送一條測(cè)試語(yǔ)句,如果執(zhí)行失敗則將這個(gè)connection清除。
注意:這個(gè)值僅和idleMaxAge搭配使用,而且不要在這里設(shè)置任何挑釁的參數(shù)!
三、BoneCP可選配置參數(shù)
1.acquireRetryAttempts
設(shè)置重新獲取連接的次數(shù)。這個(gè)參數(shù)默認(rèn)為5。
獲取某個(gè)connection失敗之后會(huì)多次嘗試重新連接,如果在這幾次還是失敗則放棄。
2.acquireRetryDelay
設(shè)置重新獲取連接的次數(shù)間隔時(shí)間。這個(gè)參數(shù)默認(rèn)為7000,單位:毫秒。如果小于等于0,BoneCP將設(shè)置為1000。
獲取connection失敗之后再次嘗試獲取connection的間隔時(shí)間。
3.lazyInit
設(shè)置連接池初始化功能。這個(gè)參數(shù)默認(rèn)為false。
設(shè)置為true,連接池將會(huì)初始化為空,直到獲取第一個(gè)connection。
4.statementsCacheSize
設(shè)置statement緩存?zhèn)€數(shù)。這個(gè)參數(shù)默認(rèn)為0。
5.disableJMX
設(shè)置是否關(guān)閉JMX功能。這個(gè)參數(shù)默認(rèn)為false。
6.poolName
設(shè)置連接池名字。用于當(dāng)作JMX和助手線程名字的后綴。
四、BoneCP調(diào)試配置參數(shù)
1.closeConnectionWatch
設(shè)置是開啟connection關(guān)閉情況監(jiān)視器功能。這個(gè)參數(shù)默認(rèn)為false。
每當(dāng)調(diào)用getConnection()時(shí),都會(huì)創(chuàng)建CloseThreadMonitor,監(jiān)視connection有沒(méi)有關(guān)閉或是關(guān)閉了兩次。警告:這個(gè)參數(shù)對(duì)連接池性能有很大的負(fù)面影響,慎用!僅在調(diào)試階段使用!
2.closeConnectionWatchTimeout
設(shè)置關(guān)閉connection監(jiān)視器(CloseThreadMonitor)持續(xù)多長(zhǎng)時(shí)間。這個(gè)參數(shù)默認(rèn)為0;單位:毫秒。僅當(dāng)closeConnectionWatch參數(shù)設(shè)置為可用時(shí),設(shè)置這個(gè)參數(shù)才會(huì)起作用。
設(shè)置為0時(shí),永遠(yuǎn)不關(guān)閉。
3.logStatementsEnabled
設(shè)置是否開啟記錄SQL語(yǔ)句功能。這個(gè)參數(shù)默認(rèn)是false。
將執(zhí)行的SQL記錄到日志里面(包括參數(shù)值)。
4.queryExecuteTimeLimit
設(shè)置執(zhí)行SQL的超時(shí)時(shí)間。這個(gè)參數(shù)默認(rèn)為0;單位:毫秒。
當(dāng)查詢語(yǔ)句執(zhí)行的時(shí)間超過(guò)這個(gè)參數(shù),執(zhí)行的情況就會(huì)被記錄到日志中。
設(shè)置為0時(shí),該功能失效。
5.disableConnectionTracking
設(shè)置是否關(guān)閉connection跟蹤功能。這個(gè)參數(shù)默認(rèn)為false。
設(shè)置為true,連接池則不會(huì)監(jiān)控connection是否嚴(yán)格的關(guān)閉;設(shè)置為false,則啟用跟蹤功能(僅追蹤通過(guò)Spring或一些事務(wù)管理等機(jī)制確保正確釋放connection并放回到連接池中)。
6.transactionRecoveryEnabled
設(shè)置事務(wù)回放功能。這個(gè)參數(shù)默認(rèn)為false。
設(shè)置為true時(shí),MemorizeTransactionProxy可以記錄所有在connection上操作的情況,當(dāng)connetion操作失敗的時(shí)候會(huì)自動(dòng)回放先前的操作,如果在回放期間還是失敗,則拋出異常。注意:這個(gè)功能會(huì)使連接池微弱地降低運(yùn)行速度。
注:本文轉(zhuǎn)自http://chirs1012f.javaeye.com/blog/805261