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