DruidDataSource詳解(一)

資源復(fù)用是系統(tǒng)性能優(yōu)化中的一種常用手段,如單例,數(shù)據(jù)庫(kù)連接池,線程池等都是資源復(fù)用的常用技巧。 數(shù)據(jù)庫(kù)連接池的基本原理是在內(nèi)部對(duì)象池中維護(hù)一定數(shù)量的數(shù)據(jù)庫(kù)連接,并對(duì)外暴露數(shù)據(jù)庫(kù)連接獲取和返回方法
和dbcp類似,druid的配置項(xiàng)如下

DruidDataSource配置
     <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> 
           <property name="url" value="${jdbc_url}" />
           <property name="username" value="${jdbc_user}" />
           <property name="password" value="${jdbc_password}" />
           <property name="filters" value="stat" />
           <property name="maxActive" value="20" />
           <property name="initialSize" value="1" />
           <property name="maxWait" value="60000" />
           <property name="minIdle" value="1" />
           <property name="timeBetweenEvictionRunsMillis" value="60000" />            <property name="minEvictableIdleTimeMillis" value="300000" />
           <property name="testWhileIdle" value="true" />      
           <property name="testOnBorrow" value="false" />        
           <property name="testOnReturn" value="false" />
           <property name="poolPreparedStatements" value="true" />
           <property name="maxOpenPreparedStatements" value="20" />     
           <property name="removeAbandoned" value="true" /> <!-- 打開removeAbandoned功能 -->
           <property name="removeAbandonedTimeout" value="1800" /> <!-- 1800秒,也就是30分鐘 -->
           <property name="logAbandoned" value="true" /> <!-- 關(guān)閉abanded連接時(shí)輸出錯(cuò)誤日志 --> 
    </bean>

filters:屬性類型是字符串,通過(guò)別名的方式配置擴(kuò)展插件,常用的插件有:監(jiān)控統(tǒng)計(jì)
用的filter:stat日志用的filter:log4j,防御sql注入的filter:wall
initialSize:初始化時(shí)建立物理連接的個(gè)數(shù)。初始化發(fā)生在顯示調(diào)用init方法,或者第一
次getConnection時(shí)
maxActive:最大連接池?cái)?shù)量
minIdle:最小連接池?cái)?shù)量
maxWait:獲取連接時(shí)最大等待時(shí)間,單位毫秒。配置了maxWait之后,缺省啟用公平鎖,并發(fā)效率會(huì)有所下降,如果需要可以通過(guò)配置useUnfairLock屬性為true使用非公平鎖
poolPreparedStatements: 是否緩存preparedStatement,也就是PSCache。PSCache對(duì)支持游標(biāo)的數(shù)據(jù)庫(kù)性能提升巨大,比如說(shuō)oracle。在mysql下建議關(guān)閉。
validationQuery:用來(lái)檢測(cè)連接是否有效的sql,要求是一個(gè)查詢語(yǔ)句,常用select 'x'。如果validationQuery為null,testOnBorrow、testOnReturn、testWhileIdle都不會(huì)起作用
validationQueryTimeout:單位秒,檢測(cè)連接是否有效的超時(shí)時(shí)間。底層調(diào)用jdbc Statement對(duì)象的void setQueryTimeout(int seconds)方法
testOnBorrow: 申請(qǐng)連接時(shí)執(zhí)行validationQuery檢測(cè)連接是否有效,做了這個(gè)配置會(huì) 降低性能。
testOnReturn:歸還連接時(shí)執(zhí)行validationQuery檢測(cè)連接是否有效,做了這個(gè)配置會(huì)降 低性能。
testWhileIdle:建議配置為true,不影響性能,并且保證安全性。指明連接是否被空閑連接回收器(如果有)進(jìn)行檢驗(yàn).如果檢測(cè)失敗,則連接將被從池中去除. 。
numTestsPerEvictionRun:不再使用,一個(gè)DruidDataSource只支持一個(gè)EvictionRun
minEvictableIdleTimeMillis:連接保持空閑而不被驅(qū)逐的最長(zhǎng)時(shí)間
connectionInitSqls:物理連接初始化的時(shí)候執(zhí)行的sql
exceptionSorter:當(dāng)數(shù)據(jù)庫(kù)拋出一些不可恢復(fù)的異常時(shí),拋棄連接
removeAbandoned:是否啟用連接泄露檢測(cè)
removeAbandonedTimeout:連接泄露,連接超過(guò)指定時(shí)間未關(guān)閉,就會(huì)被強(qiáng)行回收
logAbandoned:關(guān)閉abanded連接時(shí)輸出錯(cuò)誤日志

內(nèi)容參考:https://github.com/alibaba/druid

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評(píng)論 19 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,765評(píng)論 25 709
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,253評(píng)論 6 342
  • 今天是2016年7月28日,過(guò)完明天,這個(gè)月就算game over了。 一個(gè)月前的這個(gè)時(shí)候,我翻翻臺(tái)歷,掰掰手指,...
    Amy_dandan閱讀 374評(píng)論 0 0
  • 爆竹聲中辭舊歲,祝福聲里迎新年。 又是一年新年到,有人說(shuō)越來(lái)越?jīng)]有年味了,于是我在思索年味是什么。 5歲的侄兒說(shuō)年...
    飛揚(yáng)讀書閱讀 813評(píng)論 0 10

友情鏈接更多精彩內(nèi)容