利用commons pool2開發之前先看他的一個最佳實踐 -- JedisPool。
JedisPool是redis client的連接池,內部池對象的管理就是采用commons pool2。采用它的有很多優點是,例如:避免過多的創建連對象、自動處理最大空閑數量,避免自己處理線程問題等等。
JedisPool
只是做初始行為 設置ip host ssl等信息。
真正執行初始化 獲取資源 歸還資源的行為都是用pool來實現,pool內部含有GenericObjectPool ,GenericObjectPool就是管理池對象的最終類,它實現了ObjectPool接口,把borrowObject returnObject的方法都實現了.
JedisFactory
實現PooledObjectFactory ,GenericObjectPool 內部創建池對象就是通過這一個類,以及銷毀池對象也是,具體的實現就端口client和關閉client連接。
JedisPoolConfig
定制專屬的配置信息。
利用commons pool2 創建連接池大概就是這樣,下來我們也可以通過commons pool2 創建自己的對象連接池
- 需要放進連接池的對象
-
對象生產工廠
連接池
- 測試
這是個最簡單的案例 明白commons pool2的使用
原理
核心方法 borrowObject
默認 borrowMaxWaitMillis < 0 由于創建池對象到達最多數量時,就會執行到idleObjects.takeFirst() ,這個方法就會無限阻塞,一直等待有空閑的池對象。所有使用玩池對象的時候一定要歸還。
create
returnObject
歸還的時候簡單 判斷空閑數量是否大于最多空閑值,對齊進行銷毀 或 放進空閑隊列里;